全局eval的实现

来源:互联网 发布:淘宝水弹枪合法吗 编辑:程序博客网 时间:2024/05/20 11:23

我们在函数里调用eval的时候,所创建变量的作用域是在当前的作用域下的,比如下面的代码:

<!DOCTYPE HTML>
<html >
<head>
<meta charset="utf-8">
</head>
<script>

(function(){

eval("var a=1")

})()

console.log(a)


</script>
</html>


上面的代码所创建的变量是属于函数作用域的,在函数外面我们使用不了,所以下面说一下几种实现全局eval的方法

1,使用execScript,这个函数在低版本的ie下支持,高版本的已经不支持了,所以涉及兼容性的时候加上他,使用这个函数的时候,加不加window引用都一样,这个和eval(见第三条)不同,这个函数意思应该就是把脚步作为script标签里的脚步执行,所以加不加window都可以。

(function(){

execScript("var a=1")//低版本ie才可以成功执行

})()

console.log(a)


2,使用动态创建的script标签,在全局中执行脚步。(具体实现就是创建一个script标签,然后把需要执行的字符串当做script标签里的脚步就行,然后把新建的script标签增加到head中,执行完后删除就行)

3,使用eval,直接使用eval的时候,浏览器会把当前的作用域作为创建环境,但是我们使用window.eval或者eval.call(window,"str")的时候就可以在全局创建变量了(jquery实现中的代码是window.eval.call(window,"str"),第二个window好像是没有必要的,不知道作者是什么用意)。

(function(){

window.eval("var a=1")//低版本ie才可以成功执行

})()

console.log(a)


4,还有一个不太好的办法就是创建变量的时候不要加var,这样创建的变量是属于全局的,但是对于动态创建函数,我们就没办法了。

(function(){

eval("a=1")//低版本ie才可以成功执行

})()

console.log(a)


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 开机黑屏进入bois后怎么办 2根内存条不兼容怎么办 联想笔记本r720系统崩溃怎么办 联想天逸310卡怎么办 新买的鼠标没反应怎么办 联想笔记本触屏鼠标失灵怎么办 无线鼠标接收器丢了怎么办 联想笔记本系统重装失败怎么办 联想笔记本屏幕闪屏怎么办 种植牙螺钉掉了怎么办 水管牙断里面了怎么办 水龙头起泡器不起泡怎么办 14mm乘8mm残留怎么办 宝宝吃了螺丝冒怎么办 收割机滚筒皮带轮键槽滚了怎么办 微信界面变小了怎么办 拉杆箱螺丝掉了怎么办 洗衣机应急门锁没有拉绳怎么办? 奔驰glc发动机声音大怎么办 淋膜机模具螺丝拧不动怎么办 一字螺丝滑丝了怎么办 螺丝拧歪卡住了怎么办 车牌螺丝拧歪了怎么办 空心墙打膨胀螺丝打不上怎么办 沉孔内六角螺丝滑丝怎么办 内六角螺丝滑了怎么办? 三色灯不变光了怎么办 卧室灯不变色了怎么办 圆柱齿轮减速机噪音大怎么办 轴与套间隙生锈怎么办 汽车停小区被刮怎么办 下楼梯摔跤了 屁股疼 怎么办 剧烈咳嗽震的肚子疼怎么办 饺子粘在盘子上怎么办 生饺子粘在盘子怎么办 饺子粘在案板上怎么办 饺子冷冻粘起了怎么办 冰箱饺子冻住了怎么办 水饺都冻一块了怎么办 wps卸载了后文件打不开怎么办 六角螺母拧滑了怎么办