一、什么是闭包
1.定义 :如果在一个内部函数里,对在外部作用域(但不是全局作用域)的变量进行引用,那么内部函数就被认为是闭包。
2.如何创建闭包:
常见方式:在一个 函数内部 创建另一个函数。
例:
function createComparsionFunction(propertyName){
return function(object1,object2){
//下面这两行代码虽然在函数内部,
但是可以调用该函数外部的变量,即porpertyName
var value1=object[propertyName];
var value2=object[propertyName];
if(value1<value2){
return -1;
}
else if(value1>value2){
return 1;
}
else{
return 0;
}
};
}
3.为什么要有闭包:
由于作用域,我们无法在函数外访问函数里的变量,但我们有时又会需要使用,这时就可以用到闭包。
4.闭包的作用:
(1)可以读取整个父级作用域函数内部的变量。
(2)让这些变量的值始终保持在内存中。
(3)避免使用过多的全局变量,从而使得全局变量污染。
注意:
(1)闭包会携带包含它的函数的作用域,因此会比其他函数更占内存,过多使用闭包会使占用内存过大,从而在IE中可能导致内存泄露。因此在使用闭包后最好将当前不需使用的变量删除,如将这些值设为null,从而解除引用。
(2)闭包只能取得闭包函数中任何变量的最后一个值,前面的会与后面的值保持一致。
function createFunctions(){
var result = new Array;
for(var i=0;i<10;i++){
result[i]=function(){
return i;
};
}
return result;
}
//result[i]的每个值都是10.