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 相关文章推荐
jquery 选择器部分整理
Oct 28 Javascript
深入理解JavaScript系列(3) 全面解析Module模式
Jan 15 Javascript
javascript移出节点removeChild()使用介绍
Apr 03 Javascript
jQuery中的jQuery()方法用法分析
Dec 27 Javascript
VueJs路由跳转——vue-router的使用详解
Jan 10 Javascript
Angular.js之作用域scope'@','=','&'实例详解
Feb 28 Javascript
Vue实例中生命周期created和mounted的区别详解
Aug 25 Javascript
gulp教程_从入门到项目中快速上手使用方法
Sep 14 Javascript
vue 音乐App QQ音乐搜索列表最新接口跨域设置方法
Sep 25 Javascript
node.js的Express服务器基本使用教程
Jan 09 Javascript
用jQuery实现抽奖程序
Apr 12 jQuery
JS跨浏览器解析XML应用过程详解
Oct 16 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
一个简单计数器的源代码
2006/10/09 PHP
使用array mutisort 实现按某字段对数据排序
2013/06/18 PHP
php读取文件内容的三种可行方法示例介绍
2014/02/08 PHP
php生成xml时添加CDATA标签的方法
2014/10/17 PHP
php网页版聊天软件实现代码
2016/08/12 PHP
js 分页全选或反选标识实现代码
2011/08/09 Javascript
javascript中怎么做对象的类型判断
2013/11/11 Javascript
JS排序之选择排序详解
2017/04/08 Javascript
JavaScript学习总结之正则的元字符和一些简单的应用
2017/06/30 Javascript
Vue组件选项props实例详解
2017/08/18 Javascript
用 Vue.js 递归组件实现可折叠的树形菜单(demo)
2017/12/25 Javascript
vue.js项目 el-input 组件 监听回车键实现搜索功能示例
2018/08/25 Javascript
JS判断数组里是否有重复元素的方法小结
2019/05/21 Javascript
js动态获取时间的方法分析
2019/08/02 Javascript
javascript实现滚动条效果
2020/03/24 Javascript
JS常见错误(Error)及处理方案详解
2020/07/02 Javascript
可用于监控 mysql Master Slave 状态的python代码
2013/02/10 Python
python定时器(Timer)用法简单实例
2015/06/04 Python
python安装numpy&安装matplotlib& scipy的教程
2017/11/02 Python
python匹配两个短语之间的字符实例
2018/12/25 Python
Python最小二乘法矩阵
2019/01/02 Python
win8.1安装Python 2.7版环境图文详解
2019/07/01 Python
python小程序之4名牌手洗牌发牌问题解析
2020/05/15 Python
python读取hdfs上的parquet文件方式
2020/06/06 Python
Keras 切换后端方式(Theano和TensorFlow)
2020/06/19 Python
分享unittest单元测试框架中几种常用的用例加载方法
2020/12/02 Python
Room Mate Hotels美国:西班牙酒店品牌
2018/04/10 全球购物
三星印度官网:Samsung印度
2019/08/03 全球购物
Zatchels官网:英国剑桥包品牌
2021/01/12 全球购物
几个人围成一圈的问题
2013/09/26 面试题
销售主管岗位职责
2014/02/08 职场文书
三八节主持词
2014/03/17 职场文书
2014年市场部工作总结
2014/11/25 职场文书
收入证明范本
2015/06/12 职场文书
《百分数的认识》教学反思
2016/02/19 职场文书
MySQL root密码的重置方法
2021/04/21 MySQL