[英]Javascript memory implication of nested arrow functions
考慮:
function f1() {
function n11() { .. lots of code .. };
const n12 = () => { .. lots of code .. };
return n11()+n12()+5;
}
const f2 = () => {
function n21() { .. lots of code .. };
const n22 = () => { .. lots of code .. };
return n21()+n22()+5;
}
我試圖理解調用f1和f2的內存含義。
關於n11, 這個答案說:
對於一些非常小且通常無關緊要的“浪費”的價值。 JavaScript引擎現在效率很高,可以執行各種技巧/優化。 例如,只有函數對象(但不是實際的函數代碼!)需要在內部“復制”。 沒有顯示其他情況的實際測試用例,沒有“浪費”問題。 這個成語(嵌套和匿名函數)在JavaScript中很常見,並且非常優化。
但是我想知道這是否也適用於箭頭函數(即n12,n21和n22)..開銷只是如上所述的函數對象,還是每次調用f1 / f2時都會復制整個嵌套函數代碼?
謝謝!
對於在同一函數的不同閉包之間共享代碼而言,一個實現在箭頭函數上需要做的事情與傳統函數不同。 箭頭函數和傳統函數之間的唯一區別是箭頭函數保存this
值。 這可以使用與已為Function.prototype.bind()
方法提供的機制相同的機制來完成。 箭頭函數大多只是語法糖。
func = () => { body };
大致相當於:
func = function() { body }.bind(this);
(這是一個輕微的簡化,因為箭頭函數也沒有獲得arguments
對象,但這不應該影響你所要求的。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.