1.什么是闭包?
闭包是一个函数访问另一个函数内变量,就叫做闭包。 function a(propName){ return function(){ return propName}}
2.闭包产生原因?
闭包与作用域链有关,代码在执行时会形成一条作用域链,函数a有闭包b,那么闭包b的作用域链中会保存有函数a的所引用的变量。 闭包的作用域包括闭包本身的作用域,外部函数的作用域,全局环境的作用域
3.闭包缺点
闭包缺点1:引用变量会导致占内存,影响程序质量。 闭包缺点2:闭包引用的对象变量是该变量的最后一个值,所以变量不一定是当时的状态。
function createFunctions() {
var result = new Array();
for (var i = 0; i < 10; i++) {
result[i] = function () {
return i;
};
}
return result;
}
它们引用的都是同一个变量 i,所以都返回10
4.闭包与this
this通常是函数的执行环境,闭包中this一般指全局环境。
var name = "The Window";
var object = { name: "My Object",
getNameFunc: function () {
return function () { return this.name; }; }
};
alert(object.getNameFunc()()); //"The Window"
产生原因:每个函数只能访问自己的this和arguments,闭包中的this中也搜索不到外部函数中的this.