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 相关文章推荐
网上抓的一个特效
May 11 Javascript
jquery 仿QQ校友的DIV模拟窗口效果源码
Mar 24 Javascript
document.getElementById方法在Firefox与IE中的区别
May 18 Javascript
AngularJS ng-blur 指令详解及简单实例
Jul 30 Javascript
javascript跨域请求包装函数与用法示例
Nov 03 Javascript
node koa2实现上传图片并且同步上传到七牛云存储
Jul 31 Javascript
Angular实现表单验证功能
Nov 13 Javascript
React BootStrap用户体验框架快速上手
Mar 06 Javascript
在vue里面设置全局变量或数据的方法
Mar 09 Javascript
vue的全局变量和全局拦截请求器的示例代码
Sep 13 Javascript
react-native聊天室|RN版聊天App仿微信实例|RN仿微信界面
Nov 12 Javascript
用几道面试题来看JavaScript执行机制
Apr 30 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
珊瑚虫IP库浅析
2007/02/15 PHP
PHP教程 变量定义
2009/10/23 PHP
php过滤XSS攻击的函数
2013/11/12 PHP
php轻松实现文件上传功能
2016/03/03 PHP
php+jquery+html实现点击不刷新加载更多的实例代码
2016/08/12 PHP
jQuery学习笔记之jQuery选择器的使用
2010/12/22 Javascript
jquery下checked取值问题的解决方法
2012/08/09 Javascript
js中传递特殊字符(+,&)的方法
2014/01/16 Javascript
轻量级jQuery插件slideBox实现带底栏轮播(焦点图)代码
2016/03/28 Javascript
JS匿名函数实例分析
2016/11/26 Javascript
js实现4个方向滚动的球
2017/03/06 Javascript
详解Angular2 之 结构型指令
2017/06/21 Javascript
集合Bootstrap自定义confirm提示效果
2017/09/19 Javascript
vue文件树组件使用详解
2018/03/29 Javascript
JavaScript this绑定过程深入详解
2018/12/07 Javascript
Vue表单绑定的实例代码(单选按钮,选择框(单选时,多选时,用 v-for 渲染的动态选项)
2019/05/13 Javascript
轻松解决JavaScript定时器越走越快的问题
2019/05/13 Javascript
vue element-ui table组件动态生成表头和数据并修改单元格格式 父子组件通信
2019/08/15 Javascript
Node.js爬虫如何获取天气和每日问候详解
2019/08/26 Javascript
JavaScript如何借用构造函数继承
2019/11/06 Javascript
通过实例解析vuejs如何实现调试代码
2020/07/16 Javascript
Python3实战之爬虫抓取网易云音乐的热门评论
2017/10/09 Python
Python爬虫实现简单的爬取有道翻译功能示例
2018/07/13 Python
对Python使用mfcc的两种方式详解
2019/01/09 Python
Python实现操纵控制windows注册表的方法分析
2019/05/24 Python
Python+OpenCV实现旋转文本校正方式
2020/01/09 Python
Python qrcode 生成一个二维码的实例详解
2020/02/12 Python
Tensorflow训练MNIST手写数字识别模型
2020/02/13 Python
python利用文件时间批量重命名照片和视频
2021/02/09 Python
python 爬取腾讯视频评论的实现步骤
2021/02/18 Python
教师应聘自荐信范文
2014/03/14 职场文书
玩手机检讨书1000字
2014/10/20 职场文书
支行行长岗位职责
2015/02/15 职场文书
保研专家推荐信范文
2015/03/25 职场文书
oracle DGMGRL ORA-16603报错的解决方法(DG Broker)
2021/04/06 Oracle
使用python如何删除同一文件夹下相似的图片
2021/05/07 Python