window.eval()与eval()函数的区别是什么

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/

猜你喜欢

转载自softwhy.iteye.com/blog/2269941