理解闭包的前提是对JS变量作用域的熟悉,变量作用域包括全局变量和局部变量。
简要说明:函数内部能够访问全局变量,函数外部不能访问函数内部的局部变量,在函数内部声明的局部变量必须使用var标识符,不加var的变量默认为函数外的全局变量。
函数闭包可以简单描述为“定义在一个函数内部的函数”。闭包要解决的就是实现函数外部对函数内部局部变量的访问。
下面是两个闭包的示例:
(1)var name = "The Window";
var object = {
name : "My Object",
getNameFunc : function(){
return function(){
return this.name;
};
}
};
alert(object.getNameFunc()());
(2)var name = "The Window";
var object = {
name : "My Object",
getNameFunc : function(){
var that = this;
return function(){
return that.name;
};
}
};
alert(object.getNameFunc()());
相关知识点:
a. this的指向是在运行时决定的
b. 每次执行的匿名函数都是一个新的function,且新的function的执行上下文为window,即此时的this指向全局
c. getNameFunc函数为object的一个属性,使用“var that = this;”中的this指向object,而不是widnow
输出结果 代码(1)输出"The Window",代码(2)输出"My Object"。
网友评论