window.eval()与eval()函数的区别是什么:
eval()函数的作用这里就不做介绍了,具体可以参阅eval()函数用法详解一章节,在这篇文章中已经详细介绍了window.eval()与eval()函数的区别,但是这里还是再来做一些简要的介绍。
对于eval()应用,一般说来是不用使用window对象引用的,例如使用alert()函数也很少以window.alert()函数呈现,IE下的event对象也是如此,但是对于eval()函数确是一个例外,在不同的浏览器中会有不同的效果。
先看一段代码:
var x=5; function func() { var x="蚂蚁部落欢迎您"; eval('x=8'); } func(); alert(x);
以上代码输出结果为5,这说明函数运行之后修改的是函数的局部变量。尤其要注意的是在所有的浏览器中结果都是如此。
下面对代码进行一下修改:
var x=5; function func() { var x="蚂蚁部落欢迎您"; window.eval('x=8'); } func(); alert(x);
以上代码在IE9以下浏览器中输出结果依然是5,但是在其他标准浏览器中输出结果是8。
总结如下:
无论是eval()函数还是window.eval()函数,它们都不会创建一个新的作用域,被执行的str字符串的作用域就是eval()或者window.eval()函数所在的作用域。eval()函数的作用域就是此函数所在的作用域,但是window.eval()函数的作用域在IE6、IE7和IE8浏览器中它的作用域就是它所在的作用域,但是在其他标准浏览器中,它的作用域是全局的。
原文地址是:http://www.softwhy.com/forum.php?mod=viewthread&tid=9483
更多内容可以参阅:http://www.softwhy.com/javascript/