码迷,mamicode.com
首页 > 其他好文 > 详细

林森---博客园之二,对《闭包》的个人见解!希望能帮到不理解闭包的同学们!

时间:2017-11-11 23:46:25      阅读:165      评论:0      收藏:0      [点我收藏+]

标签:多变量   操作   初始化   dem   ++   font   程序   内存   ++i   

      Linux之父对其他程序员说过一句著名的话:show your code !
      我会尽量敲出实例代码,希望你能更加明白,理解!

      一、什么是闭包?

             正规回答:所谓“闭包”,指的是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分。
             我的回答:闭包就是函数中的函数

 

      、闭包的作用?

             ① 可以访问局部变量
例1:默认全局作用域是没法直接访问局部变量的。如下代码:

技术分享

运行结果:报错,i is not defined

解释:JS中的垃圾回收机制,当函数display()运行完毕后,会立即触发此机制,回收局部变量i以及函数。

JS的垃圾回收机制(引入计数器):

技术分享

 

我们在函数内部引入一个变量或函数时,系统都会开辟一块内存空间,如display函数变量i,还会这块内存的引用计数器进行初始化,初始化值为0。如果外部有全局变量或程序引用了这块空间,则引用计数器会自动进行+1操作。当函数display执行完毕后,系统会运行垃圾回收机制,校检局部变量与函数的引用计数器,如果为0则回收。反之则不回收。我们这个过程就称之为“JS的垃圾回收机制”。
我们都知道:局部变量是可以访问全局之外的变量的,反之却不行!
那么如何实现全局变量访问局部变量?这就引入闭包的作用之一。废话不多说,直接看代码!
技术分享

运行结果:100
原理如下:
技术分享

fn2就是函数中的函数,即可看为闭包!

             ② 让局部变量一直驻留在内存中
还是直接看实例代码,来的直接!

技术分享

那么运行分析如下:

 

第一次执行demo时,系统初始化变量i=10然后alert(++i)结果为11。

第二次执行demo,系统不会重新初始化变量i=10而是自动使用上一次的执行结果

第三次执行demo时,系统不会重新初始化变量i=10而是直接使用上一次的执行结果

...

最终的运行结果:11,12,13,14

觉得有用的话,可以分享给更多的学习者!大家乐呵,才是真的乐呵!
踏踏实实,兢兢业业,一步一个脚印,保持虚心向上的学习态度的人,一定是未来的IT大牛!
加油!!!



 

林森---博客园之二,对《闭包》的个人见解!希望能帮到不理解闭包的同学们!

标签:多变量   操作   初始化   dem   ++   font   程序   内存   ++i   

原文地址:http://www.cnblogs.com/lilinsen/p/7820241.html

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