闭包

109 阅读1分钟

一、如果一个函数用到了外部的变量,那么这个函数加这个变量,就叫做闭包。下面的a和f3就形成了闭包

let a =2 
function f3(){
console.log(a)
}

二、闭包的用途

1、可以读取函数内部的变量
2、让这些变量的值始终保持在内存中,不会在function调用后被自动清除。
3、封装对象的私有属性和私有方法。

function f1(n) {
  return function () {
    return n++;
  };
}
var a1 = f1(1);
a1() // 1
a1() // 2
a1() // 3
var a2 = f1(5);
a2() // 5
a2() // 6
a2() // 7

这段代码中,a1 和 a2 是相互独立的,各自返回自己的私有变量。

三、闭包的缺点

1、因为一段内存空间内的函数空间不会被销毁,常驻内存会增大内存使用量
2、在使用不当的情况下,容易发生内存泄漏 (只存在于IE)
3、闭包会在父函数外部,改变父函数内部变量的值。所以,如果你把父函数当作对象(object)使用,把闭包当作它的公用方法(Public Method),把内部变量当作它的私有属性(private value),这时一定要小心,不要随便改变父函数内部变量的值。