- 自己做了测试,putil.fieldValue的确会比eval性能高
- 但是 eval 只在被直接调用并且调用函数就是 eval 本身时,才在当前作用域中执行。下面的例子是并没有被直接调用的例子。
var foo = 1;
function test() {
var foo = 2;
var bar = eval;
bar('foo = 3');
return foo;
}
test(); // 2
foo; // 3
译者注:上面的代码等价于在全局作用域中调用 eval
- “eval只是一个普通的函数,只不过他有一个快速通道通向编译器,可以将string变成可执行的代码。有类似功能的还有Function , setInterval 和 setTimeout。”
- “说到性能问题,在旧的浏览器中如果你使用了eval,性能会下降10倍。在现代浏览器中有两种编译模式:fast path和slow path。fast path是编译那些稳定和可预测(stable and predictable)的代码。而明显的,eval不可预测,所以将会使用slow path ,所以会慢。
- 在使用类似于Closure Compiler等压缩(混淆)代码时,使用eval会报错。”