闭包(高频)

154 阅读1分钟

闭包是指有权访问另一个函数作用域中的变量的函数 ——《JavaScript高级程序设计》

当函数可以记住并访问所在的词法作用域时,就产生了闭包,

即使函数是在当前词法作用域之外执行 ——《你不知道的JavaScript》

  • 闭包用途:

    1. 能够访问函数定义时所在的词法作用域(阻止其被回收)
    2. 私有化变量
    3. 模拟块级作用域
    4. 创建模块
  • 闭包缺点:会导致函数的变量一直保存在内存中,过多的闭包可能会导致内存泄漏

闭包示例1:

function A(){

    function B(){

       console.log('Hello Closure!');

    }

    return B;

}

var C = A();

C();// Hello Closure!

闭包示例2(实现foo(1)(2); 输出3):

var result = foo(1)(2);
alert(result);
function foo(a){
    return function(b){
        return a+b;
    }
}