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