eval()可以优化吗?

时间:2013-03-16 09:10:28

标签: javascript

  

eval()能够更改局部变量,这对JavaScript优化器来说是个问题。

我读过javascript权威指南书。

eval()可以优化?我不明白。

1 个答案:

答案 0 :(得分:6)

这不是 eval 优化的,因为它接受字符串而不能进行静态分析,因此eval阻止了寻求优化的JavaScript引擎。关于它可能执行的代码。

考虑这个功能:

function foo(str) {
    var a = getAReallyBigArray();
    doSomethingWith(a);
    document.getElementById("foo").addEventListener('click', function() {
        alert(str);
    }, false);
}

根据规范,事件处理函数具有对a变量的引用(通过执行上下文的变量绑定对象),因此只要该事件处理程序存在,该数组就会保留在内存中。但是JavaScript引擎可以分析事件处理程序并确定无法它可以引用a,从而优化变量绑定对象的内容并让数组被垃圾收集

但是在那里扔eval

function foo(str) {
    var a = getAReallyBigArray();
    doSomethingWith(a);
    document.getElementById("foo").addEventListener('click', function() {
        eval(str);
    }, false);
}

现在,JavaScript引擎不可能优化变量绑定对象的内容,因此必须将大数组保留在内存中,以防str中有代码访问它。

这只是一个具体的例子。基本点是eval为JavaScript引擎的优化器投入了一个伟大的大扳手,有效地使它必须关闭它。