美文网首页
JS 中的闭包

JS 中的闭包

作者: limengzhe | 来源:发表于2020-09-25 19:24 被阅读0次

    函数和对其周围状态的引用捆绑在一起构成闭包 closure 。也就是说,闭包可以让你从内部函数访问外部函数作用域。在 JavaScript 中,每当函数被创建,就会在函数生成时生成闭包。

    通俗理解

    • 函数中的函数就叫闭包。
    • 一个函数可以访问另外一个函数的内部变量,这个函数就叫闭包。
    • 闭包是一个定义在父函数里面的函数。

    闭包拥有如下三个作用域的访问权:

    • 自身的作用域
    • 父作用域
    • 全局作用域

    示例

    var globalVar = "abc";
    (function outerFunction (outerArg) {
      var outerFuncVar = 'x';    
      (function innerFunction (innerArg) {
        var innerFuncVar = "y";
        console.log(         
          "outerArg = " + outerArg + "\n" + // 7
          "outerFuncVar = " + outerFuncVar + "\n" + // x
          "innerArg = " + innerArg + "\n" + // 5
          "innerFuncVar = " + innerFuncVar + "\n" + // y
          "globalVar = " + globalVar); // abc
      })(5);
    })(7);
    

    实际应用

    • 输出 0 - 9
    for(var i = 0; i < 10; i++) {
        (function (i) {
            setTimeout(() => {
                console.log(i)
            }, 0);
        })(i);
    };
    

    需要注意的地方

    • 由于闭包会使得函数中的变量都会被保存在内存中,内存消耗很大,所以不能滥用闭包,否则会造成网页的性能问题。
    • 闭包会在父函数外部改变父函数内部变量的值。所以如果你把父函数当作对象使用,把闭包当作的它的公用方法,把内部变量当作他的私有属性,这时一定要小心不要随便改变父函数内部变量的值。

    相关文章

      网友评论

          本文标题:JS 中的闭包

          本文链接:https://www.haomeiwen.com/subject/wuafuktx.html