function foo(str, a) {
eval( str );
console.log( a, b );
}
foo( "var b = 3;", 1 );
Run Code Online (Sandbox Code Playgroud)
这很好用,但是当我们使用let而不是var时,它不起作用.为什么?
Gui*_*ges 21
因为eval引入了一个新的代码块.声明using var将在此代码块之外声明一个变量,因为var在函数作用域中声明了一个变量.
let另一方面,在块范围内声明一个变量.因此,您的b变量只会在您的eval块中可见.它在您的函数范围内不可见.
编辑:更确切地说eval+ let做,事实上,创建一个词汇环境.使用eval()查看定义const变量中的 @RobG响应