如何快速的理解JavaScript闭包?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何快速的理解JavaScript闭包?相关的知识,希望对你有一定的参考价值。

先看问题

1、 在js中的作用域是什么?

  作用域就是作用范围,作用空间。作用域分为全局作用域和局部作用域。(这个东西大家都明白)

  如果把局部作用域比作一个国家,那么全局作用域就是地球,地球上除了那个国家之外的所有国家都无法直接命令那个国家的人做任何事情。

2、 闭包的意义何在?

  保护代码,直接看代码

技术分享

  可以从代码中得出结论,全局作用域中“声明”的的a和局部作用域中“声明”的a互不干扰,且无法在fn()函数的外部访问到里面的a和b,这就是闭包的意义所在。
3、 所以,很好,现在这俩家伙已经互不干扰了,那我怎么访问里面的那家伙呢,使得我们既可以访问a,也不影响到外边同名同姓的a?

  我们通过函数的返回值将变量返回出来:

技术分享

  但是我们并不能直接这样做,因为如果代码是这样的:

技术分享

 

  此时我每使用一次fn()那么他里面的代码将会被执行一次,这显然是不可取的,那么思路就有了,那就是只执行一次fn(),就可以多次访问里面的变量:

技术分享

  此时我们调用fn,拿到了fn的返回值,这个返回值是fn()内部的函数的地址,也就相当于我以后可以在外部直接调用这个函数并且不影响到外边函数的执行,而这个正式闭包的真正意义。

 

 

 

 

  

 


以上是关于如何快速的理解JavaScript闭包?的主要内容,如果未能解决你的问题,请参考以下文章

js面向对象

全面理解js面向对象

理解 Javascript 执行上下文和执行栈

如何在 Emacs Lisp 中进行闭包?

译理解JavaScript闭包——新手指南

理解JavaScript闭包