eval和new Function的区别
Posted 杯酒红尘
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了eval和new Function的区别相关的知识,希望对你有一定的参考价值。
eval和new Function都可以动态解析和执行字符串。但是它们对解析内容的运行环境判定不同。
var a = ‘global scope‘
function b(){
var a = ‘local scope‘
eval(‘console.log(a)‘) //local scope
;(new Function(‘‘,‘console.log(a)‘))() //global scope
}
b()
eval中的代码执行时的作用域为当前作用域。它可以访问到函数中的局部变量。
new Function中的代码执行时的作用域为全局作用域,不论它的在哪个地方调用的。所以它访问的是全局变量a。它根本无法访问b函数内的局部变量。
注意,当我们在b函数中不定义变量a时,两种方法的输出相同。这与上述结论并不冲突。因为代码执行时,对变量的查找是从内到外的。当eval中的代码执行时,它依然是优先从b函数内部查找a变量,当查找不到时,再到全局中查找a,这时找到的a当然是‘global scope‘。
var a = ‘global scope‘ function b(){ //var a = ‘local scope‘ eval(‘console.log(a)‘) //global scope ;(new Function(‘‘,‘console.log(a)‘))() //global scope } b()
以上是关于eval和new Function的区别的主要内容,如果未能解决你的问题,请参考以下文章
eval() 和 new Function() 是一回事吗?
javascript JS_new_Function()_ EVAL
超级超级好玩的东西: eval 与new Function的用法