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
。