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并不会重新复制

posted on 2015-07-10 11:32  句号小弟wutian  阅读(8067)  评论(2编辑  收藏  举报