Js高级程序设计-函数

210 阅读1分钟

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.