js知识总结—基础进阶篇

1.eval(jsstr)和new Function(jsstr)

evalnew Function都可以动态解析和执行字符串。会将字符串转义为js代码。区别如下:

1.对解析内容的运行环境判定不同: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()

2.eval() 安全性较低,最好不要使用。它使用与调用者相同的权限执行代码。 eval() 运行的字符串代码若被恶意方修改,将会影响计算机的安全。

3.evalnew Function更慢,因为它必须调用 JS 解释器,很吃性能。

加载中...
加载中...