js 的闭包
闭包,实际就是一个函数,它使用了它外部的变量。对于 js 来说,其实就是一个函数里的函数,就是闭包了。
例如,创建一个加 5 的函数:
function makeAdder(x) {
return function (y) {
return x + y;
};
}
var add5 = makeAdder(5);
闭包解决 this 指向的问题
场景 1
var name = 'The Window';
var object = {
name: 'My Object',
getNameFunc: function () {
return function () {
return this.name;
};
},
};
alert(object.getNameFunc()());
这里object.getNameFunc()会获取一个返回this.name的函数,而 js 的 this 会指向自己的调用方,当前调用方是 window,所以返回的是The Window。
场景 2
var name = 'The Window';
var object = {
name: 'My Object',
getNameFunc: function () {
var that = this;
return function () {
return that.name;
};
},
};
alert(object.getNameFunc()());
这里object.getNameFunc()返回了一个带有闭包的函数,这个闭包中使用that来引用父级的this,这个闭包的父级就是getNameFunc,它的this指向的是 object,所以返回的是My Object。