Skip to main content

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