闭包:
闭包指有权访问另一个函数作用域中变量的函数
一个作用域可以访问另一个函数作用域就叫做闭包。
闭包的作用延伸变量作用域;
让我们来看这样的一个思考题:
var name = "The window";
var object_one = {
name: 'My Object',
getName: function() {
return function() {
return this.name;
};
}
};
理解: 当我们调用object.getName这个对象函数时返回的就是一个函数此时相当于
var f=function() {
return this.name;
};
后面就是f.()也就是
function(){
return this.name
}()这不就是立即执行函数吗?然后立即执行函数中this指向的是window所以打印出来的name是The window。
var name = "The window";
var object_two = {
name: "My Object",
getName: function() {
var that = this;
return function() {
return that.name;
};
}
};
console.log(object_two.getName()());
object_two.getName()相当于调用这个对象中的对象方法,然后对象方法中的this指向的是该方法所属的对象
也就是object_two 然后返回一个函数(此时这个函数没有被调用) var f=function() {
return that.name;
}; f();虽然这个也是立即执行函数,但是这个返回的是that.name 这里的that指向的是object_two 所以打印的应该就是My object 然后这里有闭包的产生