相信網上對閉包有很多的解釋,畢竟這個玩意兒是仁者見仁智者見智,對於我來說,總結了2個特性:
1.函數嵌套函數,內部函數可以引用外部函數的參數和變量
function aaa() { var a = 5; function bbb() { alert(a) } return bbb } var c = aaa(); c();
2.參數和變量不會被垃圾回收機制所收回
JS中的垃圾回收機制 function test(){ var a = 1; alert(a) } test(); // 執行完這個函數,函數里面的a就不存在了,
下面來扯一下閉包的好處:
1.希望變量長期駐扎在內存當中(一般函數執行完畢,變量和參數會被銷毀)
2.避免全局變量的污染
function aaa() { var a = 1; a++; alert(a) } aaa(); // 2 aaa(); // 2 aaa(); // 2 上面的函數不管執行幾次,彈出的都是2,如果我們想彈出2/3/4 這樣的結果呢?就需要用到閉包
function aaa() { var a = 1; return function(){ a++; alert(a) } } var bbb = aaa(); bbb(); // 2 bbb(); // 3 bbb(); // 4 // 函數表達式的寫法 var aaa = (function () { var a = 1; return function () { a++; alert(a) } })() aaa() // 2 aaa() // 3 aaa() // 4