javascript常見閉包面試題


閉包的定義

閉包就是能夠讀取其他函數內部變量的函數


 

什么時候使用閉包

閉包可以用在許多地方。它的最大用處有兩個,一個是前面提到的可以讀取函數內部的變量,另一個就是讓這些變量的值始終保持在內存中。


 

先看看一般的調用方法:

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的相關問題

  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

 


閉包變量常駐內存

 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並不會重新復制


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM