手机
当前位置:查字典教程网 >编程开发 >Javascript教程 >eval与window.eval的差别分析
eval与window.eval的差别分析
摘要:它们之间有区别吗?开发过程中似乎很少有人去加个额外的window,觉得多此一举。比如Ajax过程中回调函数解析JSON格式字符串复制代码代码...

它们之间有区别吗?

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

【eval与window.eval的差别分析】相关文章:

window.onload与$(document).ready()的区别分析

javaScript中with函数用法实例分析

JavaScript中的异常处理方法介绍

JQuery中DOM事件冒泡实例分析

javaScript中push函数用法实例分析

js设置document.domain实现跨域的注意点分析

javascript中createElement的两种创建方式

JS与Java在网页设计中的区别

JSON与XML优缺点对比分析

JavaScript中的this机制

精品推荐
分类导航