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 相关文章推荐
JavaScript 产生不重复的随机数三种实现思路
Dec 13 Javascript
js单例模式的两种方案
Oct 22 Javascript
js判断运行jsp页面的浏览器类型以及版本示例
Oct 30 Javascript
基于jquery插件实现常见的幻灯片效果
Nov 01 Javascript
解析Javascript中难以理解的11个问题
Dec 09 Javascript
js表单中选择框值的获取及表单的序列化
Dec 17 Javascript
Node.js利用Net模块实现多人命令行聊天室的方法
Dec 23 Javascript
Node.js复制文件的方法示例
Dec 29 Javascript
jQuery访问浏览器本地存储cookie、localStorage和sessionStorage的基本用法
Oct 20 jQuery
ES6中Class类的静态方法实例小结
Oct 28 Javascript
vue-star评星组件开发实例
Mar 01 Javascript
微信小程序点餐系统开发常见问题汇总
Aug 06 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
PHP新手上路(四)
2006/10/09 PHP
PHP递归删除目录几个代码实例
2014/04/21 PHP
php动态函数调用方法
2015/05/21 PHP
PHP排序算法类实例
2015/06/17 PHP
Yii CDBCriteria常用方法实例小结
2017/01/19 PHP
用js判断浏览器是否是IE的比较好的办法
2007/05/08 Javascript
Jquery创建一个层当鼠标移动到层上面不消失效果
2013/12/12 Javascript
解决node.js安装包失败的几种方法
2016/09/02 Javascript
javascript中this关键字详解
2016/12/12 Javascript
AngularJS中update两次出现$promise属性无法识别的解决方法
2017/01/05 Javascript
JavaScript中数组的各种操作的总结(必看篇)
2017/02/13 Javascript
微信小程序 template模板详解及实例
2017/02/21 Javascript
自定义事件解决重复请求BUG的问题
2017/07/11 Javascript
JavaScript实现的仿新浪微博原生态输入字数即时检查功能【兼容IE6】
2017/09/26 Javascript
angular2/ionic2 实现搜索结果中的搜索关键字高亮的示例
2018/08/17 Javascript
JavaScript indexOf()原理及使用方法详解
2020/07/09 Javascript
Vue将props值实时传递 并可修改的操作
2020/08/09 Javascript
Linux下Pycharm、Anaconda环境配置及使用踩坑
2018/12/19 Python
Python如何实现转换URL详解
2019/07/02 Python
用python3读取python2的pickle数据方式
2019/12/25 Python
PyCharm取消波浪线、下划线和中划线的实现
2020/03/03 Python
Django模型中字段属性choice使用说明
2020/03/30 Python
浅谈Python中的模块
2020/06/10 Python
手把手教你将Flask应用封装成Docker服务的实现
2020/08/19 Python
Python之字符串的遍历的4种方式
2020/12/08 Python
Python实现给PDF添加水印的方法
2021/01/25 Python
Expedia印度尼西亚站:预订酒店、廉价航班和度假套餐
2018/01/31 全球购物
Book Depository亚太地区:一家领先的国际图书零售商
2019/05/05 全球购物
说一下Linux下有关用户和组管理的命令
2014/08/18 面试题
《雷雨》教学反思
2014/02/20 职场文书
学校节能减排方案
2014/06/13 职场文书
班子成员四风问题自我剖析材料
2014/09/29 职场文书
个人思想政治总结
2015/03/05 职场文书
单位计划生育责任书
2015/05/09 职场文书
ICOM R71E和R72E图文对比解说
2022/04/07 无线电
详解Vue3使用axios的配置教程
2022/04/29 Vue.js