2013-06-27 28 views
-1

我在JavaScript中從過去3個月的工作,但無法理解一些關於閉包:在javascript中完全封閉解決了什麼困難?

  1. 準確的封蓋,這種語言解決什麼問題?
  2. 什麼時候應該使用閉包?
  3. 它是與性能還是僅與最佳實踐相關?

我看了How do JavaScript closures work?,有很好的解釋,但是我不能回答上面的問題。

+1

關閉主要是避免在全局範圍內使用變量。例如,當使用不同的插件時,如果每個插件在全局範圍內使用相同的名稱變量,則最後加載的插件將覆蓋另一個插件的前一個變量。關閉讓你保持變量的值,特別是如果你正在循環內部做一些異步操作。 –

+0

本文可能會幫助你。 http://msdn.microsoft.com/en-us/magazine/ff696765.aspx只要繼續使用Google和閱讀,那裏就有很多文章 – Geoff

回答

2

這裏是一個封閉件例如:

var items = ["a","b", "c"]; 
var displayItem = function (i) { 
    return function() { 
     alert(items[i]); 
    } 
} 

for (var i = 0; i < items.length; i++) { 
    window.setTimeout(displayItem(i), 100); 
} 
  1. 的封閉保持的功能的上下文信息。在這個例子中,閉包保留了數字,如果計數器和物品數組。如果我不使用閉包,conter會改變,所有提示都會顯示爲undefined(var我應該是3)。

  2. 你正在使用閉包,你可能沒有注意到。沒有規定何時使用它們。在其他函數中聲明函數時,您正在創建閉包。在這個例子中,我只用我需要的數據創建了一個閉包。但是,displayItem函數創建了一個閉包,允許他訪問items數組。

  3. 使用閉包可能會有性能問題,因爲您迫使瀏覽器在內存中保留更多數據。所以人們不會將它用於表現,也不是最佳實踐,它只是解決一些問題的其他工具。