• 闭包理解


    //官方对闭包的解释是: 一个拥有许多变量和绑定了这些变量的环境的表达式( 通常是一个函数), 因而这些变量也是该表达式的一部分。

    //我的理解是,闭包就是能够读取其他函数内部变量的函数。

    /* 闭包的用途:
    它的最大用处有两个,
    一个是可以读取函数内部的变量,
    另一个就是让这些变量的值始终保持在内存中。 */

    /* 闭包的特点:
      1.作为一个函数变量的一个引用,当函数返回时,其处于激活状态。
      2.一个闭包就是当一个函数返回时,一个没有释放资源的栈区。
      简单的说,javascript允许使用内部函数---即函数定义和函数表达式位于另一个函数的函数体内。而且,这些内部函数可以访问它们所在的外部函数中声明的所有局部变量、参数和声明的其他内部函数。当其中一个这样的内部函数在包含它们的外部函数之外被调用时,就会形成闭包。 */

    /* 使用闭包的注意点

    1)由于闭包会使得函数中的变量都被保存在内存中,内存消耗很大,所以不能滥用闭包,否则会造成网页的性能问题,在IE中可能导致内存泄露。解决方法是,在退出函数之前,将不使用的局部变量全部删除。

    2)闭包会在父函数外部,改变父函数内部变量的值。所以,如果你把父函数当作对象(object)使用,把闭包当作它的公用方法(Public Method),把内部变量当作它的私有属性(private value),这时一定要小心,不要随便改变父函数内部变量的值。
    */

    function closure() {
    var str = "I'm a part variable."; //所以str所占用的资源不会被回收
    return function() {
    console.log(str);
    };
    }
    var fObj = closure();
    fObj();

    //函数f1中的局部变量n一直保存在内存中,并没有在f1调用后被自动清除。
    function f1() {
    var n = 999;
    nAdd = function() {
    n += 1;
    };

    function f2() {
    console.log(n);
    }
    return f2;
    }
    var result = f1();
    result(); // 999
    nAdd();
    result(); // 1000
  • 相关阅读:
    xcode构建webdriverAgent时报错Messaging unqualified id的解决办法
    ubuntu18.0安装RabbitMQ
    python中*的用法
    Jenkins构建项目
    Jenkins安装与配置
    git_仓库
    六、 Shell数组应用
    五、 Shell函数应用
    三、 Shell流程控制
    二、 Shell变量定义
  • 原文地址:https://www.cnblogs.com/xzma/p/8022182.html
Copyright © 2020-2023  润新知