function foo(str, a) {
eval( str );
console.log( a, b );
}
foo( "var b = 3;", 1 );
这工作得很好,但是当我们使用 let 而不是 var 时,它就不起作用了。为什么?
Because eval
引入了一个新的代码块。声明使用var
将在该代码块之外声明一个变量,因为var
在函数作用域中声明一个变量。
let
另一方面,在块作用域中声明变量。所以,你的b
变量仅在您的eval
堵塞。它在您的函数范围内不可见。
更多关于 var 和 let 之间的区别 https://stackoverflow.com/questions/762011/whats-the-difference-between-using-let-and-var-to-declare-a-variable-in-jav
EDIT: 更准确的说eval
+ let
事实上,创建一个词汇环境 https://www.ecma-international.org/ecma-262/6.0/#sec-lexical-environments。请参阅@RobG 的回复使用 eval() 定义 const 变量 https://stackoverflow.com/questions/43188732/define-const-variable-using-eval
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)