javascript常見閉包面試題

閉包的定義閉包

閉包就是可以讀取其餘函數內部變量的函數函數


 

何時使用閉包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

  1. 在全局函數中this等於window
  2. 當函數被當作某個對象的方法調用時,this等於那個對象
  3. 匿名函數的執行環境具備全局性,this一般指向window

那麼如何訪問「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

相關文章
相關標籤/搜索