簡體   English   中英

閉包中的變量性能與函數參數的關系

[英]Performance of Variables in a Closure versus as Function Arguments

有沒有人知道通過函數參數傳遞變量的優化效果與通過閉包獲得變量? 似乎通過函數參數傳遞變量會更快,因為對象是通過引用復制的(如此快速的復制時間),並且爬上函數的范圍環境需要檢查每個級別的環境。 這是我的意思的要點

a = 5;
b = function() {
  alert(a);
}
b();

a = 5;
b = function(c) {
  alert(c);
}
b(a);

哪個在理論上表現得更快?

我不久前有同樣的問題,所以我把一個快速的基准了一頓 似乎大多數流行的瀏覽器(令人驚訝地)更喜歡在范圍內查找(FF24非常如此)。

我希望這回答了你的問題。

攀登功能的范圍環境需要檢查每個級別的環境

只是在理論上。 實際上,由於范圍鏈不是動態的,因此可以並且將優化為靜態引用。

通過函數參數傳入變量會更快,因為對象是通過引用復制的(因此復制時間很快)

即使它非常快,它們仍然需要被復制。 該函數需要為它們分配額外的內存,而對閉包的引用並不是那樣的。


如果您可以在閉包范圍中放置一個值,請執行此操作。 它只是實用的,你想建立一個閉包。 如果您不希望並且在函數中需要變量參數,請使用參數。 使用更易讀的替代方案。

這完全取決於。 不要擔心它,除非它是未來的一個大問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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