javascript - 如果一个函数是在一个函数内创建的,它是否会在每次调用外部函数时再次创建?

标签 javascript performance

我想知道在一个函数内(或在一个循环内,就此而言)创建一个函数是否会使嵌套的函数被一遍又一遍地创建。主要是出于效率原因。

Some preliminary search告诉我嵌套函数将继续被引用,而外部函数仍然存在。所以......我假设它不会被再次创建?我不确定。

函数一共有三种,

function bar() {};
let bar = function() {};
let bar = () => {};

还有两个用例:

嵌套在 foo() 中(只定义一次)

function foo() { /*declare bar in here*/ }

for(/*a bazillion times*/)
    foo();

在循环中声明裸体:

for(/*a bazillion times*/) {
    /*declare bar in here*/
}

那么什么是标准的,什么是可以预期的?

在您回答之前,是的,我知道我冒着因询问性能而失去网络开发人员许可证的风险。 ;)

最佳答案

如果您创建函数而不将其保存在变量 (1.flavor) 中,那么在循环内定义它可能会更快。原因是如果你从不进入循环,函数对象将永远不会被构造。

此外,每次进入循环时都不会再次构造函数对象。至少在 Chromium 和 Firefox 中是这样。我不知道规范怎么说。

我用这段代码来测试它:

var f = null;
for (let i = 0; i < 10; i++)
{
    function bar()
    {
        if (f == null)
            f = this;
        else if (f == this)
            document.getElementById("moh").textContent += "same function, ";
        else
            document.getElementById("moh").textContent += "diff function, ";
    };
    bar();
}
<div id="moh"></div>

同样有趣的是,您可以从循环外部调用 bar()。但前提是循环执行一次。

关于javascript - 如果一个函数是在一个函数内创建的,它是否会在每次调用外部函数时再次创建?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57323133/

相关文章:

python - 性能:Python pandas DataFrame.to_csv append 逐渐变慢

javascript - 我可以使用 JS 使符号可拖动吗?

javascript - 从键值对列表创建数组 [n,[v,..,z]]

javascript - 如何编写一个函数来禁用 console.log 并可以在其他 react 文件中使用?

c# - 将字节数组转换为 texture2D XNA

performance - 对于动态游戏场上拥有大量 AI 的游戏来说,哪种导航方法最高效、最灵活?

jquery - .html() 和 .append() 哪个更快?

javascript - 更改用户个人资料图片 Javascript、PHP、HTML

javascript - 在 beforeunload 上显示模态一段时间,然后离开页面?

c# - 自动属性会影响运行时性能吗?