function func1(str) {
eval(str);
newVar = 100;
function func2() {
console.log(bar);
console.log(newVar);
}
func2();
}
func1("bar = 42;");
我读过应该避免使用 eval() 关键字,因为它会欺骗词法范围(这会导致代码运行速度变慢)。根据上述示例(或任何其他示例)的上下文,我试图了解这可能最终会破坏哪种编译器优化。
看这条线 newVar = 100; 这个变量也将在执行阶段由引擎(在全局范围内)创建。我不认为这等于“欺骗”词汇范围。那么 eval("bar = 42;") 的问题是什么,它本质上做了类似的事情?希望问题很清楚。