• JavaScript闭包


    /*
      JavaScript实现了自动释放内存的系统,当代码不再需要时,就从电脑的内存中把它移除。这些自动化系统叫做垃圾回收(garbage collector)。
      当函数执行完毕时,管理内存的本地方法会将函数中所有创建了的东西从内存中移除。毕竟函数已经执行完毕,所以似乎我们不再需要访问该执行环境中的任何东西了。
    */
    /*
    var prison = function () {
      var prisoner = 'Josh Powell';
    };
    
    prison();
    */
    /*
      一旦prison完成执行,我们就不需要访问prisoner变量,所以Josh自由啦。这种模式有点繁琐,所以我们把它转换为自执行匿名函数的模式。
    */
    /*
    (function () {
      var prisoner = 'Josh Powell';
    })();
    */
    /*
      这是同一回事,函数执行完成时,prisoner变量就不再需要保存在内存中了。再见Josh!
      我们把这一段代码粘帖到模块模式中去。
    */
    
    var prison = (function() {
      var prisoner = 'Josh Powell';
    
      /* 将变量或者函数保存为对象上名字相同的属性,然后由模块模式返回该对象,我们对这一做法会非常熟悉:整本书都使用这种做法。
      */
      return { prisoner: prisoner };
    
    })();
    // outputs 'Josh Powell'
    console.log( prison.prisoner );
    
    /*
      我们仍然不需要在匿名函数执行后访问prisoner变量。因为字符串Josh Powell已经保存在prison.prisoner中,没有理由再在模块所在的内存中保存prisoner变量,因为它不能再被访问。
      prison.prisoner的值是字符串Josh Powell。 */ var prison = (function() { var prisoner = 'Josh Powell'; return { prisoner: function () { return prisoner; } } })(); // console.log( prison.prisoner() ); /* 现在我们终于可以回答“什么是闭包”这个问题了。闭包是阻止垃圾回收器将变量从内存中移除的方法,使得在创建变量的执行环境的外面能够访问到该变量。
      在prisoner函数被保存到prison对象上时,一个闭包就创建了。闭包因保存函数而被创建,闭包因保存函数而被创建,在执行环境的外面,可以动态的访问prisoner变量,
      这就阻止了垃圾回收器将prisoner变量从内存中移除。 */

       我们再多看几个闭包的示例。

  • 相关阅读:
    c语言面试基础题
    fwrite(&stud[i],sizeof(struct student_type),1,fp)的基本含义
    对于文件操作函数的记录
    将字符串s1复制到字符串s2。
    将键盘输入的几个数据存储到文件里的程序
    利用指针对二维数组进行遍历查找程序
    常见的C语言错误及程序的调试
    文件的基本操作函数及说明
    一个磁盘信息向另一个磁盘信息的复制
    常用流程图符号和基本流程图
  • 原文地址:https://www.cnblogs.com/nodejsxxh/p/4423800.html
Copyright © 2020-2023  润新知