zoukankan      html  css  js  c++  java
  • 闭包

    高级程序设计》上,这样说:当在函数内部定义了其他函数时候,就创建了闭包。闭包有权访问包含函数内部的所有变量。

            一般来说,内部函数是能够访问到上一级乃至全局的的变量的,那么就有人这样理解:通过闭包,可以实现外部访问函数局部内的变量。

    1. function a(){  
    2.   
    3.          var i=0;  
    4.   
    5.         function b(){  
    6.   
    7.                  alert(++i);  
    8.   
    9.           }  
    10.   
    11.          return b;  
    12.   
    13.  }  
    14.   
    15.  var c = a();  
    16.   
    17.  c();
    复制代码



    即,闭包的作用就是在a执行完并返回后,闭包使得Javascript的垃圾回收机制GC不会收回a所占用的资源,因为a的内部函数b的执行需要依赖a中的变量。
    由于闭包的存在使得函数a返回后,a中的i始终存在,这样每次执行c(),i都是自加1后alert出i的值。
    那么,如果a不返回函数b,情况就完全不同了。因为a执行完后,b没有被返回给a的外界,只是被a所引用,而此时a也只会被b引用,因此函数a和b互相引用但又不被外界打扰(被外界引用),函数a和b就会被GC回收。

    实际上是就是闭包延长变量的生命周期。通常函数的作用域即变量会在函数执行结束后被销毁,但当函数返回一个闭包,只要闭包不被释放,整条作用域链都会占用内存。
            说道作用域链:即 函数自己的作用域、上一层的函数的作用域....和全局作用域。访问一个变量时,自己的没有,就一层层往上找,直至全局,若还没有,就报错。

  • 相关阅读:
    Python中数据在内存中存储汇总
    python每日一题:爬取一些代理网站获取动态ip
    python每日一题:关于反爬虫措施
    python每日一题:爬虫一些需要登录账号密码的网站
    python每日一题:爬虫某网站图书信息
    【MyBatis】MyBatis CRUD
    【MyBatis】自定义 MyBatis
    【JavaWeb】i18n 国际化
    【JavaWeb】AJAX 请求
    【JavaWeb】JSON 文件
  • 原文地址:https://www.cnblogs.com/qq309240790/p/4788175.html
Copyright © 2011-2022 走看看