eval与window.eval的差别分析

 更新时间:2011年03月17日 00:13:52   作者:  
eval与window.eval的差别分析,学习js的朋友可以了解下。
它们之间有区别吗?

开发过程中似乎很少有人去加个额外的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一个不能少。

相关文章

  • cnblogs csdn 代码运行框实现代码

    cnblogs csdn 代码运行框实现代码

    大家用cnblogs,csdn博客发布技术文档的时候,可以用下面的代码实现运行功能。当然大家看了源码就会发现其实方法还有很多。有更好的方法就发布一下啊。
    2009-11-11
  • js实现汉字排序的方法

    js实现汉字排序的方法

    这篇文章主要介绍了js实现汉字排序的方法,涉及javascript针对中文编码的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-07-07
  • 利用JS进行图片的切换即特效展示图片

    利用JS进行图片的切换即特效展示图片

    做网页时需要利用JS进行特效展示图片,下面是利用JS简单制作的图片的切换,需要的朋友可以了解下
    2013-12-12
  • 微信小程序调用摄像头隐藏式拍照功能

    微信小程序调用摄像头隐藏式拍照功能

    这篇文章主要介绍了微信小程序调用摄像头隐藏式拍照功能,本文给大家带来了解决方法、官网代码和小编写的比较完整代码,需要的朋友可以参考下
    2018-08-08
  • 使用typescript类型实现ThreeSum

    使用typescript类型实现ThreeSum

    这篇文章主要介绍了使用typescript类型实现ThreeSum,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以一下,希望对你学习又是帮助
    2022-08-08
  • JavaScript实现简单动态表格

    JavaScript实现简单动态表格

    这篇文章主要为大家详细介绍了JavaScript实现简单动态表格,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-12-12
  • Webpack4+Babel7+ES6兼容IE8的实现

    Webpack4+Babel7+ES6兼容IE8的实现

    这篇文章主要介绍了Webpack4+Babel7+ES6兼容IE8的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-04-04
  • JS简单实现查看文档创建日期、修改日期和文档大小的方法示例

    JS简单实现查看文档创建日期、修改日期和文档大小的方法示例

    这篇文章主要介绍了JS简单实现查看文档创建日期、修改日期和文档大小的方法,结合实例形式分析了JavaScript使用fileCreatedDate属性、fileModifiedDate属性、lastModified属性和fileSize属性相关操作技巧,需要的朋友可以参考下
    2018-04-04
  • js实现微信分享代码

    js实现微信分享代码

    这篇文章主要介绍了js实现微信分享朋友链接显示,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2015-12-12
  • 微信小程序 websocket 实现SpringMVC+Spring+Mybatis

    微信小程序 websocket 实现SpringMVC+Spring+Mybatis

    这篇文章主要介绍了 微信小程序websocket实现SpringMVC+Spring+Mybatis的相关资料,这里提供实现思路及实现代码,需要的朋友可以参考下
    2017-08-08

最新评论