eval,new Function都可动态解析,执行字符串。
可以把字符串解析成js脚本并执行。
eval
全局方法,传入一个参数(String)即可执行
let name = 'a'
eval('console.log(name)')
// 输出'a'
new Function
new Funtion() 可以接受n个参数,**最后一个参数作为函数体**
let name = 'a'
let test = new Function('arg', 'console.log(arg)')
// 等同于 test = function(arg) { console.log(arg) }
test(name)
// 输出'a'
作用域
eval代码执行时作用域为当前作用域,可以访问到函数中的局部变量。
new Funtion代码执行时作用域为全局作用域,放问的是全局变量。
举个例子
var a = 'global scope'
function b () {
var a = 'local scope'
eval('console.log(a)') // 输出local scope
(new Function('', 'console.log(a)')() // 输出global scope
}
b();