eval
eval(codeString)
用来执行代码字符串codeString
,并且返回最后一个表达式(注意不是声明语句)的值。这里需要注意的是返回的值是表达式的值,比如 'const a =1'和 'a = 1'
,第一个执行eval
返回undefined
,第二个返回1
,
对于定义函数来说,如果想用eval动态构造函数,那么有两种方式:1.使用箭头函数表达式构造函数,2.使用()
将函数function声明语句包裹起来,
var res = eval('a = 1') //
res // 1
var res = eval('const a = 1') //
res // undefined
var res = eval(`(data)=>{console.log(data,111)}`)
res // 是函数
var res = eval(`(function(data){console.log(data,111)})`)
new Function
格式:new Function(形参1,形参2,...,函数体)
const fn = new Function('x','y','return x+y')
推荐使用new Function动态构造函数,安全性比eval要高.
共同点:二者构造的函数的作用域都是全局的,可以通过bind,call,apply
来修改this
的指向