轻松理解 闭包



引用一段JavaScript权威指南的代码:
function counter(){
var n=0;
return {counter: function(){ return n++;
},
reset: function(){ n = 0;}
 
};
}


var c = counter(), d = counter();

c.count();
d.count();
c.reset();
d.reset();

闭包的定义:

闭包是指有权访问另一个函数作用域中的变量的函数;【JavaScript高级程序设计】

函数对象可以通过作用域链(函数的执行依赖于变量作用域,在函数定义是决定)相互关联起来,函数体内部的变量都可以保存在函数作用域上,这种特性称为闭包(函数也是一种闭包)。【JavaScript权威指南】


在闭包中,使用this容易出现一个错误,如下:

var test = function(){
var name = "inner";
output : function(){
 return this.name;
}
}
var name = "outer";
test.output(); //"outer"

这是因为闭包在外部函数的时候无法引用(保存)内部的this,所以,要想使函数输出inner,就必须将this 保存下来:

引用一段JavaScript权威指南的代码:

var test = function(){
var name = "inner";
var that = this;
output : function(){
 return that.name;
}
}
var name = "outer";
test.output();

引用一段JavaScript权威指南的代码:

你可能感兴趣的:(javascript,javascript,this)