gpt4 book ai didi

javascript - eval() 可以优化吗?

转载 作者:行者123 更新时间:2023-11-29 16:16:09 25 4
gpt4 key购买 nike

It is the ability of eval() to change local variables that is so problematic to JavaScript optimizers.

我读了 javascript 权威指南这本书。

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

最佳答案

不是 eval 优化了,而是寻求优化的 JavaScript 引擎被 eval 阻止了,因为它接受一个字符串他们无法对其可能执行的代码进行静态分析。

考虑这个函数:

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

根据规范,事件处理函数引用了 a 变量(通过执行上下文的词法环境对象),因此数组在内存中保存的时间与存在事件处理程序。但是 JavaScript 引擎可以分析事件处理程序并确定它肯定不引用 a,因此优化变量绑定(bind)对象的内容并让数组成为垃圾收集到。

但是在里面放一个eval:

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

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

这只是一个具体的例子。基本点是 eval 给 JavaScript 引擎优化器的工作带来了很大的麻烦,有效地使引擎关闭了它对出现 eval 的代码的优化器。

关于javascript - eval() 可以优化吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15447519/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com