function foo(str, a) {
eval( str );
console.log( a, b );
}
foo( "var b = 3;", 1 );
这很好用,但是当我们使用let而不是var时,它不起作用。为什么呢?
答案 0 :(得分:20)
因为eval
引入了一个新的代码块。使用var
的声明将在此代码块之外声明一个变量,因为var
在函数作用域中声明了一个变量。
let
在块作用域中声明一个变量。因此,您的b
变量只会在eval
块中显示。它在您的功能范围内不可见。
More on the differences between var and let
编辑:为了更加精确eval
+ let
,事实上,创建一个Lexical Environment。请参阅Define const variable using eval()