eval与window.eval的差别分析


Posted in Javascript onMarch 17, 2011

它们之间有区别吗?

开发过程中似乎很少有人去加个额外的window,觉得多此一举。比如Ajax过程中回调函数解析JSON格式字符串

... 
function callback(str){ 
var json = eval('(' + str + ')'); 
} 
...

通常直接使用eval,而非var json = window.eval('(' + str + ')');
又比如调试时使用alert,很少有人使用window.alert;IE中获取事件对象使用event,很少有人使用window.event。(Firefox中在某些情况下也支持event而不支持window.event。感兴趣的同学看看这篇 获取事件对象的全家)

但由于各个引擎实现差异,它们的区别还是有的。

var x = 5; 
function fn(){ 
var x = 'jack'; 
eval('x=10;'); 
} 
fn(); 
alert(x); // -->5

所有浏览器中输出的都是5,说明调用fn后eval修改的是fn内的局部变量x,而非全局的x。即eval执行的闭包环境是在fn内。

修改下,把以上代码的eval换成window.eval,测试后发现各个浏览器中的表现不一样了。

IE6/7/8 : 仍然输出5,即没有修改全局变量x,修改的仍然是局部变量x。
IE9/Firefox/Safari/Chrome/Opera : 输出10,修改的是全局变量x。

可以得出结论了
IE6/7/8中,eval和window.eval一样,写在自定义函数内是局部闭包,否则是全局闭包。
IE9/Firefox/Safari/Chrome/Opera中,eval同以上IE6/7/8,window.eval即使写在自定义函数内使用的也是全局闭包。

此外:IE中的window.execScript总是在全局闭包下执行,令人惊奇的是Chrome也支持该方法。呵,Chrome策略是标准,IE一个不能少。

Javascript 相关文章推荐
[JS源码]超长文章自动分页(客户端版)
Jan 09 Javascript
jQuery ui 1.7更新小结
Aug 15 Javascript
jQuery 实现侧边浮动导航菜单效果
Dec 26 Javascript
JS实现左右拖动改变内容显示区域大小的方法
Oct 13 Javascript
JavaScript实战之菜单特效
Aug 16 Javascript
浅谈js常用内置方法和对象
Sep 24 Javascript
ES6中参数的默认值语法介绍
May 03 Javascript
Vue表单类的父子组件数据传递示例
May 03 Javascript
关于Vue项目跨平台运行问题的解决方法
Sep 18 Javascript
JS原生带缩略图的图片切换效果
Oct 10 Javascript
使用 node.js 模仿 Apache 小部分功能
Jul 07 Javascript
关于javascript中的promise的用法和注意事项(推荐)
Jan 15 Javascript
整理一些JavaScript的IE和火狐的兼容性注意事项
Mar 17 #Javascript
jquery.validate分组验证代码
Mar 17 #Javascript
jquery中ajax调用json数据的使用说明
Mar 17 #Javascript
jQuery版Tab标签切换
Mar 16 #Javascript
jquery select(列表)的操作(取值/赋值)
Mar 16 #Javascript
jquery radio 操作代码
Mar 16 #Javascript
ajax更新数据后,jquery、jq失效问题
Mar 16 #Javascript
You might like
JAVA/JSP学习系列之二
2006/10/09 PHP
dedecms中显示数字验证码的修改方法
2007/03/21 PHP
php Ajax乱码
2008/04/09 PHP
ThinkPHP Mobile使用方法简明教程
2014/06/18 PHP
PHP树的深度编历生成迷宫及A*自动寻路算法实例分析
2015/03/10 PHP
PHP+MYSQL中文乱码问题
2015/07/01 PHP
PHP技术开发微信公众平台
2015/07/22 PHP
Yii2使用$this->context获取当前的Module、Controller(控制器)、Action等
2017/03/29 PHP
JavaScript回调(callback)函数概念自我理解及示例
2013/07/04 Javascript
jQuery实现横向带缓冲的水平运动效果(附demo源码下载)
2016/01/29 Javascript
JavaScript类型系统之布尔Boolean类型详解
2016/06/26 Javascript
XMLHttpRequest Level 2 使用指南
2016/08/26 Javascript
jQuery Easyui datagrid连续发送两次请求问题
2016/12/13 Javascript
jQuery实现节点的追加、替换、删除、复制功能示例
2017/07/11 jQuery
javascript 日期相减-在线教程(附代码)
2017/08/17 Javascript
JavaScript实现随机点名小程序
2020/10/29 Javascript
python selenium 获取标签的属性值、内容、状态方法
2018/06/22 Python
Python函数中不定长参数的写法
2019/02/13 Python
TensorFlow卷积神经网络之使用训练好的模型识别猫狗图片
2019/03/14 Python
Python 线程池用法简单示例
2019/10/02 Python
Python合并2个字典成1个新字典的方法(9种)
2019/12/19 Python
Python 模拟生成动态产生验证码图片的方法
2020/02/01 Python
moosejaw旗下的户外商品促销网站:Mountain Steals
2017/02/27 全球购物
阿根廷首家户外用品制造商和经销商:Montagne
2018/02/12 全球购物
Java里面有没有全局变量?为什么?
2015/02/06 面试题
关于母亲节的感言
2014/02/04 职场文书
违反校纪校规检讨书
2014/02/15 职场文书
施工安全责任书
2014/04/14 职场文书
2014年庆祝国庆65周年演讲稿
2014/09/21 职场文书
2014年妇委会工作总结
2014/12/10 职场文书
入党政审材料范文
2014/12/24 职场文书
村干部任职承诺书
2015/01/21 职场文书
2016年大学生社会实践心得体会
2015/10/09 职场文书
七年级作文之我的梦想
2019/10/16 职场文书
Python pandas之求和运算和非空值个数统计
2021/08/07 Python
使用CSS实现百叶窗效果示例代码
2023/05/07 HTML / CSS