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获得指定控件输入光标的坐标兼容IE,Chrome,火狐等多种主流浏览器
May 21 Javascript
Javascript delete 引用类型对象
Nov 01 Javascript
提升PHP安全:8个必须修改的PHP默认配置
Nov 17 Javascript
javascript异步处理工作机制详解
Apr 13 Javascript
JavaScript中对DOM节点的访问、创建、修改、删除
Nov 16 Javascript
浅谈Angularjs link和compile的使用区别
Oct 21 Javascript
Vue.js第四天学习笔记(组件)
Dec 02 Javascript
javascript编写简易计算器
May 06 Javascript
浅谈Angular HttpClient简单入门
May 04 Javascript
详解JSON和JSONP劫持以及解决方法
Mar 08 Javascript
SpringBoot+Vue 前后端合并部署的配置方法
Dec 30 Vue.js
vue 组件基础知识总结
Jan 26 Vue.js
整理一些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如何通过AJAX方式实现登录功能
2015/11/23 PHP
PHP 输出缓冲控制(Output Control)详解
2016/08/25 PHP
PHP XML和数组互相转换详解
2016/10/26 PHP
PHP简单实现循环链表功能示例
2017/11/10 PHP
PHP实现的日历功能示例
2018/09/01 PHP
php+lottery.js实现九宫格抽奖功能
2019/07/21 PHP
Laravel5.5 手动分页和自定义分页样式的简单实现
2019/10/15 PHP
Extjs学习笔记之三 extjs form更多的表单项
2010/01/07 Javascript
JavaScript实现向右伸出的多级网页菜单效果
2015/08/25 Javascript
Bootstrap开发实战之第一次接触Bootstrap
2016/06/02 Javascript
JavaScript之DOM插入更新删除_动力节点Java学院整理
2017/07/03 Javascript
webstorm和.vue中es6语法报错的解决方法
2018/05/08 Javascript
JavaScript 正则命名分组【推荐】
2018/06/07 Javascript
vue router 通过路由来实现切换头部标题功能
2019/04/24 Javascript
Vue 3.0 前瞻Vue Function API新特性体验
2019/08/12 Javascript
LayUi数据表格自定义赋值方式
2019/10/26 Javascript
[01:34]DOTA2 7.22版本新增神杖效果一览(敏捷英雄篇)
2019/05/28 DOTA
用Python编写简单的微博爬虫
2016/03/04 Python
python实现TF-IDF算法解析
2018/01/02 Python
Python安装lz4-0.10.1遇到的坑
2018/05/20 Python
pycharm恢复默认设置或者是替换pycharm的解释器实例
2018/10/29 Python
python自动化生成IOS的图标
2018/11/13 Python
python实现最大子序和(分治+动态规划)
2019/07/05 Python
django云端留言板实例详解
2019/07/22 Python
python GUI库图形界面开发之PyQt5信号与槽事件处理机制详细介绍与实例解析
2020/03/08 Python
详解Tensorflow不同版本要求与CUDA及CUDNN版本对应关系
2020/08/04 Python
中学门卫岗位职责
2013/12/26 职场文书
十佳美德少年事迹材料
2014/02/05 职场文书
校园安全教育广播稿
2014/02/17 职场文书
个人求职自荐信范文
2014/06/20 职场文书
2014教师教育实践活动对照检查材料思想汇报
2014/09/21 职场文书
授权委托书样本
2014/09/25 职场文书
质量保证书格式
2015/02/27 职场文书
村官个人总结范文
2015/03/03 职场文书
Win11怎么跳过联网验机 ?Win11跳过联网验机激活教程
2022/04/05 数码科技
idea下配置tomcat避坑详解
2022/04/12 Servers