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

相关文章
相关标签/搜索