为什么让关键字不能与eval()一起使用

时间:2018-04-30 10:08:42

标签: javascript

function foo(str, a) {
  eval( str );
  console.log( a, b );
}

foo( "var b = 3;", 1 ); 

这很好用,但是当我们使用let而不是var时,它不起作用。为什么呢?

1 个答案:

答案 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()

中的@RobG回复