码迷,mamicode.com
首页 > Web开发 > 详细

JS - 闭包学习

时间:2017-06-21 13:36:15      阅读:157      评论:0      收藏:0      [点我收藏+]

标签:网络   程序设计语言   val   私有变量   引用   全局   存在   默认   将不   

       刚学习了闭包,主要是从廖雪峰的官方网站和阮一峰的网络日志中学的。总结如下:

   JS的闭包,就是一个函数A里面有一个内嵌的函数B,A 返回的是B 。B可以访问A的参数和局部变量,当A返回B时,A的参数和局部变量就保存在B中,这就是闭包。B在返回时并没有立刻执行,z直到调用时候B()才执行。

  在A里定义局部变量,一定要用到var 来定义,否则该变量就默认为全局变量了。

闭包的用途

      闭包可以用在许多地方。它的最大用处有两个,一个是前面提到的可以读取函数内部的变量,另一个就是让这些变量的值始终保持在内存中。

     (摘自阮一峰的网络日志)

      在面向对象的程序设计语言里,比如Java和C++,要在对象内部封装一个私有变量,可以用private修饰一个成员变量。

      在没有class机制,只有函数的语言里,借助闭包,同样可以封装一个私有变量,从外部读取局部变量

    (摘自廖雪峰的官方网站)

使用闭包的注意点

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

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

  (摘自阮一峰的网络日志)

  3)返回闭包B时牢记的一点就是:闭包B不要引用任何循环变量,或者后续会发生变化的变量。如果一定要引用循环变量怎么办?方法是再创建一个函数,用该函数的参数绑定循环变量当前的值,无论该循环变量后续如何更改,已绑定到函数参数的值不变。(摘自廖雪峰的官方网站)

 

JS - 闭包学习

标签:网络   程序设计语言   val   私有变量   引用   全局   存在   默认   将不   

原文地址:http://www.cnblogs.com/caifang-blog/p/7058793.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!