先看问题

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

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

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

2、 闭包的意义何在?

  保护代码,直接看代码

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

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

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

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

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

  

如何快速的理解JavaScript闭包?的更多相关文章

  1. 我从来不理解JavaScript闭包,直到有人这样向我解释它...

    摘要: 理解JS闭包. 原文:我从来不理解JavaScript闭包,直到有人这样向我解释它... 作者:前端小智 Fundebug经授权转载,版权归原作者所有. 正如标题所述,JavaScript闭包 ...

  2. 我从来不理解 JavaScript 闭包,直到有人这样向我解释它...

    正如标题所述,JavaScript 闭包对我来说一直有点神秘,看过很多闭包的文章,在工作使用过闭包,有时甚至在项目中使用闭包,但我确实是这是在使用闭包的知识. 最近看国外的一些文章,终于,有人用于一种 ...

  3. 深入理解JavaScript闭包【译】

    在<高级程序设计>中,对于闭包一直没有很好的解释,在stackoverflow上翻出了一篇很老的<JavaScript closure for dummies>(2016)~ ...

  4. 【转】深入理解JavaScript闭包闭包(closure) (closure)

    一.什么是闭包?"官方"的解释是:闭包是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分.相信很少有人能直接看懂这句话,因为他描述 ...

  5. 全面理解Javascript闭包和闭包的几种写法及用途

    好久没有写博客了,过了一个十一长假都变懒了,今天总算是恢复状态了.好了,进入正题,今天来说一说javascript里面的闭包吧!本篇博客主要讲一些实用的东西,主要将闭包的写法.用法和用途.  一.什么 ...

  6. 深入理解JavaScript闭包(closure)

    最近在网上查阅了不少javascript闭包(closure)相关的资料,写的大多是非常的学术和专业.对于初学者来说别说理解闭包了,就连文字叙述都很难看懂.撰写此文的目的就是用最通俗的文字揭开Java ...

  7. 深入理解javascript闭包(一)

    闭包(closure)是Javascript语言的一个难点.也是它的特色,非常多高级应用都要依靠闭包实现. 一.什么是闭包? 官方"的解释是:闭包是一个拥有很多变量和绑定了这些变量的环境的表 ...

  8. 深入理解javascript闭包(一)

    原文转自脚本之家(http://www.jb51.net/article/24101.htm) 闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现. ...

  9. 深入理解Javascript闭包概念

    一.变量的作用域 要理解闭包,首先必须理解Javascript特殊的变量作用域. 变量的作用域无非就是两种:全局变量和局部变量. Javascript语言的特殊之处,就在于函数内部能够直接读取全局变量 ...

随机推荐

  1. C++引用形参,函数返回多个值

    之前编代码有遇到过想让一个函数返回多个值的情况,low low的我不知道有什么办法,直接使用的全局变量将函数里的值传出去. 今天看书,<C++primer>第五版中文版第189页:使用引用 ...

  2. year:2017 month:07 day:31

    2017-07-31 JAVA se 1:基础 控制语句:continue语句:退出本次循环 break语句:退出当前循环 循环语句:for(初始化:条件表达式:循环体){循环语句} 先初始化,再执行 ...

  3. [技术]浅谈c++ this指针

    背景 matrix operator*=(const matrix &a){ *this=*this*a; return *this; } XXX:诶,你这个*this是什么啊,是指针吗 博主 ...

  4. windows本地提权对照表(转载)

    2003     systeminfo>C:\Windows\Temp\temp.txt&(for %i in (KB3057191 KB2840221 KB3000061 KB2850 ...

  5. Vue组件基础用法

    前面的话 组件(Component)是Vue.js最强大的功能之一.组件可以扩展HTML元素,封装可重用的代码.根据项目需求,抽象出一些组件,每个组件里包含了展现.功能和样式.每个页面,根据自己所需, ...

  6. JavaScript获取客户端IP地址

    1. 第三方接口 1) 这里提供一个搜狐接口的地址:http://pv.sohu.com/cityjson?ie=utf-8 ,将这个js引入到页面即可得到returnCitySN. 2) api.i ...

  7. 解决UIViewController中添加子控制器viewWillAppear不调用问题

    问题描述: 我在UICollectionViewController中添加子控制器数组, 并在cellForItem中把子控制器数组中对应的控制器对应的view添加到了UICollectionView ...

  8. Scala关于软件的安装(《Programming in Scala》这本书)

    这篇文章主要介绍怎么在终端来写Scala语言.在Scala创始人出的Coursera课程中是让我们在IDE中sbt写Scala语言,而在这本书貌似让我们在终端上直接用Scala写.官网有介绍不过不详细 ...

  9. 一次使用pywin32学到的知识

    FindWindow这个函数检索处理顶级窗口的类名和窗口名称匹配指定的字符串.这个函数不搜索子窗口. FindWindowEx:FindWindowEx是在窗口列表中寻找与指定条件相符的第一个子窗口 ...

  10. [您有新的未分配科技点]无旋treap:从好奇到入门(例题:bzoj3224 普通平衡树)

    今天我们来学习一种新的数据结构:无旋treap.它和splay一样支持区间操作,和treap一样简单易懂,同时还支持可持久化. 无旋treap的节点定义和treap一样,都要同时满足树性质和堆性质,我 ...