闭包,个人理解就是可以访问其他函数内部变量的函数
function funA() {
var a = 10; // funA的活动对象之中;
return function() { // 这就是一个闭包
alert(a);
};
}
var b = funA();
b() // alert(10)
以上代码的return的函数就是一个闭包。
正常情况下我们访问不到函数funA里的变量a,但是我们通过定义一个return一个函数的返回值来读取这个变量,是闭包的一个用法
再来看闭包中的this指向,闭包中的this指向的是window,通过两个例子更好的理解一下
var name = "The Window";
var object = {
name: "My Object",
getNameFunc: function() { // 这是对象方法
return function() { // 这是闭包,所以this指向的是window
return this.name;
};
}
};
alert(object.getNameFunc()()); // "The Window"
var name = "The Window";
var object = {
name: "My Object",
getNameFunc: function() { // 这是对象方法
var that = this; // 将object的this赋值给that
return function() {
return that.name; // that 是object里的this,所以that.name 是my object
};
}
};
alert(object.getNameFunc()()); // "My Object"
在执行环境中,this的指向只是与如何调用这个方法有关。闭包不属于任何对象,它不是一个对象的方法(就不能使用点运算符调用)。因为js是面向对象的编程语言,所有变量和函数要指定属于某个对象,如果没有指定属于哪个对象,那么它就属于window对象