2
在这个例子中:是否在每次调用时重新评估名称空间函数?
function foo() {
function bar() {
return 'foo bar';
}
bar();
}
foo();
是bar
重新评估每一个X倍foo
叫?
相反地:
function bar() {
return 'foo bar';
}
function foo() {
bar();
}
foo();
这benchmark表明后面的例子是+/- 1.6倍更快(在Chrome)。
如果不重新评估,为什么第二种模式比第一种模式快得多?
每次运行完整的函数体都会被评估。只要'bar'函数声明是body的一部分 - 每次都会对它进行评估。 – zerkms
谢谢。在问我之前,我只知道我的问题的答案 - 仅仅从实际经验中得出。我想我的“线间”问题是,我将如何去验证这个问题?它是否从浏览器更改为浏览器?标准的“JavaScript如何工作?”谷歌搜索没有产生有益的结果。 – jtrumbull
函数被允许在内部被缓存,所以'bar()'可能不会每次都被100%重新创建(特别是函数体可以被缓存,因为它是静态的),但是它必须重新构建信封,而第二个则不需要这样的设置成本。 – dandavis