【发布时间】:2016-03-26 02:31:49
【问题描述】:
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;") 的问题是什么,它本质上做了类似的事情?希望问题很清楚。
【问题讨论】:
-
如果引擎知道它可以看到和使用哪些部分(提前,在解析时),函数可以运行得更快。代码在
"use strict"中不起作用是一个好兆头,您正在使用eval()次优。 -
你在这里问什么?
-
将功能想象为外科医生执行手术;如果患者的 X 光片上有不清楚的区域,那么在进行仔细的手术探查的同时执行手术将需要更长的时间。
-
func1("var newVar")- 未设置全局变量。哎呀。 -
func1("bar = top.document")- 哪一行有条件地引发安全错误?eval的那个还是console.log(bar)的那个?
标签: javascript eval javascript-engine