gpt4 book ai didi

javascript - 在另一个函数中声明一个函数的含义

转载 作者:行者123 更新时间:2023-12-02 19:14:39 25 4
gpt4 key购买 nike

鉴于以下两个:

场景 1

function inner() {
// a bunch of code that does stuff
}
function outer() {
inner();
}
for(var i = 0; i < 10000; i++) {
outer();
}

场景 2

function outer() {
function inner() {
// a bunch of code that does stuff
}
inner();
}
for(var i = 0; i < 10000; i++) {
outer();
}

毫无疑问,这两种情况下的行为是相同的。但幕后有什么区别呢?在场景 2 中,口译员做了多少额外工作(如果有)?内存力是否受到影响。或者,如果 inner() 的主体变长,是否会增加对性能的影响?

请不要费心去问“你为什么要这样做”,因为我的问题不是关于实际问题的。只是想更深入地了解 JS 函数是如何解析和表示的。谢谢!

最佳答案

But what's the difference under the hood? How much extra work, if any, is the interpreter doing in scenario 2?

这完全取决于 JavaScript 引擎。 (我不再称它们为“解释器”,因为它们中的许多实际上是动态编译的。)

理论上,引擎可能会在每次进入outer时重新解释/重新编译inner。或者至少,为每次调用 outer 分配一个新的 inner

对于现代引擎,更可能的情况是inner代码仅编译一次并重用,并且为每次调用创建一个新的函数对象outer 会在不同的执行上下文中重用该代码。这种影响可以忽略不计(考虑一下您在 JavaScript 函数中编写 {} 的频率,而不用担心创建对象的影响)。当然,这就是 V8(Chrome 中的引擎)在大多数情况下所做的事情,而且几乎肯定是大多数现代引擎所做的事情。

关于javascript - 在另一个函数中声明一个函数的含义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13280443/

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