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对图片base64编码字符串进行解码并输出图像示例
Mar 17 Javascript
JS案例分享之金额小写转大写
May 15 Javascript
JavaScript中window.showModalDialog()用法详解
Dec 18 Javascript
JavaScript语言对Unicode字符集的支持详解
Dec 30 Javascript
自动完成的搜索框javascript实现
Feb 26 Javascript
jquery——九宫格大转盘抽奖实例
Jan 16 Javascript
jQuery插件FusionCharts绘制的2D双面积图效果示例【附demo源码】
Apr 11 jQuery
jQuery中ajax请求后台返回json数据并渲染HTML的方法
Aug 08 jQuery
vscode下的vue文件格式化问题
Nov 28 Javascript
jquery绑定事件 bind和on的用法与区别分析
May 22 jQuery
Vue中用JSON实现刷新界面不影响倒计时
Oct 26 Javascript
vue使用element-ui按需引入
May 20 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
DISCUZ 分页代码
2007/01/02 PHP
PHP读取XML值的代码(推荐)
2011/01/01 PHP
php 流程控制switch的简单实例
2016/06/07 PHP
PHP实现统计代码行数小工具
2019/09/19 PHP
thinkphp5 模型实例化获得数据对象的教程
2019/10/18 PHP
优化javascript的执行速度
2010/01/23 Javascript
AngularJS实现元素显示和隐藏的几个案例
2015/12/09 Javascript
Bootstrap CSS布局之代码
2016/12/17 Javascript
bootstrap的常用组件和栅格式布局详解
2017/05/02 Javascript
Vue.js中组件中的slot实例详解
2017/07/17 Javascript
Node.js 利用cheerio制作简单的网页爬虫示例
2018/03/01 Javascript
vue如何根据网站路由判断页面主题色详解
2018/11/02 Javascript
vue路由导航守卫和请求拦截以及基于node的token认证的方法
2019/04/07 Javascript
微信小程序云开发实现数据添加、查询和分页
2019/05/17 Javascript
js实现的格式化数字和金额功能简单示例
2019/07/30 Javascript
VUE+node(express)实现前后端分离
2019/10/13 Javascript
python批量下载图片的三种方法
2013/04/22 Python
Django REST framework视图的用法
2019/01/16 Python
python实现弹跳小球
2019/05/13 Python
python实现桌面气泡提示功能
2019/07/29 Python
python读取Kafka实例
2019/12/23 Python
Python urlencode和unquote函数使用实例解析
2020/03/31 Python
Pytorch如何切换 cpu和gpu的使用详解
2021/03/01 Python
详解HTML5中的元素与元素
2015/08/17 HTML / CSS
canvas实现滑动验证的实现示例
2020/08/11 HTML / CSS
戴森台湾线上商城:Dyson Taiwan
2018/05/21 全球购物
德国亚洲食品网上商店:asiafoodland.de
2019/12/28 全球购物
文秘大学生求职信
2014/02/25 职场文书
安全生产网格化管理实施方案
2014/03/01 职场文书
大学生就业自我推荐信
2014/05/10 职场文书
户外宣传策划方案
2014/05/25 职场文书
员工激励培训演讲稿
2014/09/16 职场文书
合同权益转让协议书模板
2014/11/18 职场文书
学习雷锋精神倡议书
2015/04/27 职场文书
考生诚信考试承诺书(2016版)
2016/03/25 职场文书
浅谈pytorch中的dropout的概率p
2021/05/27 Python