gpt4 book ai didi

javascript - 为什么 arguments.callee 会损害性能?

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:44:13 25 4
gpt4 key购买 nike

使用 arguments.callee 的替代方法就是简单地命名函数,如下所示:

// Snippet 1, using arguments.callee:
(function(){
document.body.innerHTML += 'qwe';
setTimeout(arguments.callee, 1);
})()

// Snippet 2, using naming:
(function f(){
document.body.innerHTML += 'qwe';
setTimeout(f, 1);
})()

是什么阻止 JavaScript 引擎/编译器自动将代码段 1 优化为上面的代码段 2?是否存在一些固有限制?

  • MDN's argument基本上可以归结为:

    ..arguments.callee substantially hinders optimizations like inlining functions, because it must be made possible to provide a reference to the un-inlined function if arguments.callee is accessed.

    但是,如果我们手动命名该函数并通过它的名称调用它,我们已经提供了对该函数的引用,因此“阻碍了像内联函数这样的优化”。

  • Olliej's argument基本上是“在一般情况下内联和尾递归[变得]不可能[而如果使用命名则可能]”。然而,没有提供任何证据,看起来像是挥手(另请参阅他的帖子下方的评论)。

为什么函数命名比使用 arguments.callee 更高效?

最佳答案

根据我的阅读,MDN 并不是说​​“很难提供对未内联函数的引用”;相反,它是在说“很难确保,当您访问 arguments.callee 时,您会获得对未内联函数的引用”。

(这只是你问题的一半答案,因为我仍然不清楚为什么 arguments.callee 应该比 的其余部分更难保持最新>arguments,或者比 this。所以这个论点,就目前而言,显然没有说服力。但这就是我认为 MDN 所说的。)

关于javascript - 为什么 arguments.callee 会损害性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23403036/

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