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