zoukankan      html  css  js  c++  java
  • 闭包

      看了阮一峰老师的学习JavaScript闭包,发表一下我的总结。

      JS里面有三种作用域:全局作用域,函数作用域和块作用域,而变量的作用域只有两种:全局变量和局部变量。因为函数内部可以读取全局变量,但是全局变量无法读取函数内部的变量,相当于函数已经把自己的变量给封装起来了,所以正常情况下是无法获取函数内部变量值的,只能通过在函数内部再定义一个函数,就相当于在函数里再创建了一个子作用域,构成链式作用域。子对象可以沿着作用域链寻找所有父对象的变量,如果不只想在闭包内获取函数的变量值,还想要在函数外部获取的话,就需要把这个闭包函数作为父对象的返回值,这样就可以直接在全局中调用父对象的函数,并赋给一个变量,再调用这个变量。

      所以闭包的本质是在函数内部(父对象{}内)和函数外部(父对象{}外)直接架起桥梁,二者的变量可以通过这座桥梁来来往往。闭包的用途主要有两个:

      1.读取函数内部的值

      2.让变量的值始终保持在内存中,无法被回收

      正由于闭包的第二个用途,所以闭包会使得闭包函数和它所在的父对象都被保存在内存中,内存消耗很大,所以不可以滥用闭包,不然会造成性能问题,甚至在 IE 中会造成泄漏。解决方法是在退出函数之前,将需要被闭包使用的局部变量删除掉。

      闭包还有一个特别大的权利,可以隔空改变父函数的值,此时的父函数有点类似于class,而闭包类似于一个public函数,这个public函数可以访问并且改变class里的变量,这个权利要是滥用了也会造成很严重的后果。

      之后可能会再补充一些闭包的总结。关于闭包的使用,其实不单单是看总结就能完全把握的,还需要多做题,练成题感之后就不容易被坑了。

    单纯是把博客作为学习的记录,有些博客是看了别人的文章之后再自己总结的,所以不保证完完整整的原创性,如果引用了链接或者作者觉得侵权的话可以联系我删除哦~
  • 相关阅读:
    Ant 中作用代理
    linux通用自动清理日志脚本
    linux shell 脚本攻略 下
    我在写shell自动部署脚本碰到的问题
    linux shell 脚本攻略(上)
    Java Object.wait() jvm的bug
    shell 脚本 更新或者添加host ,并且增加hostname映射到hosts (修改)
    记一次子域名IP搜集reconngkali
    ie6下面试用png使用滤镜需知
    canvas 使用 图片 切片的时候 在chrome 下 要注意的 一点
  • 原文地址:https://www.cnblogs.com/hey-Sarah/p/13443453.html
Copyright © 2011-2022 走看看