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