簡體   English   中英

嵌套箭頭函數的Javascript內存含義

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM