闭包

一、WHAT:闭包是什么

闭包就是指可以访问另一个函数作用域变量的函数

二、WHY:为什么要使用闭包

在js中,存在全局变量和局部变量,函数内部是可以访问全局变量的,但函数外部不能读取函数内部的变量。在有些情况下,例如想反复使用,又想避免全局污染,就可以使用到闭包。

闭包有两个用途:

  • 使用闭包可以访问函数中的变量
  • 可以使变量长期保存在内存中,生命周期较长

三、HOW:怎么使用闭包

在一个函数内部声明一个函数,这个内部函数对外层函数的变量执行一些操作,然后返回这个内部函数。把外层函数保存在一个全局变量中。

1
2
3
4
5
6
7
8
9
10
11
12
function fn1(){
var a = 1;

function fn2(){
return a++;
}

return fn2;
}
var f = fn1();
f(); // 1
f(); // 2

四、注意事项

闭包不能滥用,因为闭包会使函数中的变量都被保存在内存中,内存消耗大,会影响网页的性能,在ie中可能导致内存泄露,闭包使用完了后,要立即释放资源,将引用变量指向null