2013-03-15 50 views
3

我理解Javascript關閉背後的理論概念,就像有一個只能由內部函數訪問的變量一樣......所以在JS中實現私有變量。Javascript關閉的實際用法/示例

但我想了解一些實際的例子,其中閉包實際上是有幫助的。所以我需要示例不要了解閉包是什麼,但是實際使用Closure。

+0

可能的重複[JavaScript關閉如何工作?](http://stackoverflow.com/questions/111102/how-do-javascript-closures-work)我認爲這個問題應該已經關閉,也不是建設性的,但它在這裏。 – gdoron 2013-03-15 07:25:53

+0

這個問題可能更適合[programmers.se]。這裏感覺太開放了。 – 2013-03-15 07:27:37

+0

兩件事情1),使得它們的值不會被訪問它們的其他函數無意地修改。 2)如果你安裝了一個使用javascript的瀏覽器插件,將會有一個與你的變量同名的全局變量會發生什麼? – gaurav 2013-03-15 07:32:41

回答

8

兩個標準的例子:

1)回調保持變量:

var a = [1, 2, 3]; 
    for (var i=0; i<a.length; i++) { 
     (function(j){ 
      setTimeout(function(){ 
      console.log(a[j]); 
      }, 1000*j); 
     })(i); 
    } 

2)保持私有變量

var obj = (function(){ 
    var private = 0; 
    return { 
     increment: function(){ private++; }, 
     getValue: function(){ return private; } 
    } 
})(); 

其實最簡單的就是記住一個事:什麼是交流losure,這是從函數到創建它的範圍的鏈接。這個鏈接可以防止作用域(及其變量)被垃圾回收,並且它是這個作用域的唯一可訪問的鏈接(因此隱私)。