閉包的定義閉包
閉包就是可以讀取其餘函數內部變量的函數函數
何時使用閉包this
閉包能夠用在許多地方。它的最大用處有兩個,一個是前面提到的能夠讀取函數內部的變量,另外一個就是讓這些變量的值始終保持在內存中。spa
先看看通常的調用方法:code
1 var flag = "window"; 2 var object = { 3 flag : "local", 4 sayFlag: function(){ 5 alert(this.flag); 6 } 7 } 8 object.sayFlag();//local
而後改用閉包:對象
1 var flag = "window"; 2 var object = { 3 flag : "local", 4 sayFlag: function(){ 5 //返回一個匿名函數 6 return function(){ 7 alert(this.flag); 8 } 9 } 10 } 11 object.sayFlag()();//window
這裏給你們普及一下this的相關問題blog
那麼如何訪問「local呢」?內存
1 var flag = "window"; 2 var object = { 3 flag : "local", 4 sayFlag: function(){ 5 var that = this; //此處的this是object的引用 6 //返回一個匿名函數 7 return function(){ 8 alert(that.flag); 9 } 10 } 11 } 12 object.sayFlag()();//local
閉包變量常駐內存io
1 var say = function(){ 2 var i = 1; 3 var sayName = function(){ 4 i++; 5 alert(i); 6 } 7 return sayName; 8 } 9 var result1 = say(); 10 result1(); //1 11 result1(); //2
因爲閉包訪問外部函數的i,外部函數返回引用閉包函數,因此內存不會被回收,i值也常駐內存,因此每次執行say函數時,i並不會從新複製function