参考文献
阮一峰老师的这篇文章解释的很清楚。摘录要点如下。
1 背景知识
1.1 变量的作用域
变量的作用域无非就是两种:全局变量和局部变量。
Javascript语言的特殊之处,就在于函数内部可以直接读取全局变量。
1.2 如何从外部读取局部变量
在函数的内部,再定义一个函数
function f1(){
var n=999;
function f2(){
alert(n);
}
return f2;
}
var result=f1();
result(); // 999
2 JS闭包概念
闭包就是能够读取其他函数内部变量的函数
3 闭包的用途
- 读取函数内部的变量
- 让这些变量的值始终保持在内存中
- 暴露接口,隐藏实现
代码举例
闭包函数中关键字this的使用
var name = "The Window";
var object = {
name : "My Object",
getNameFunc : function(){
return function(){
return this.name;
};
}
};
alert(object.getNameFunc()()); //The Window
var name = "The Window";
var object = {
name : "My Object",
getNameFunc : function(){
var that = this;
return function(){
return that.name;
};
}
};
alert(object.getNameFunc()());//My Object