某种情况下,函数调用依然持有对其原始定义的作用域的引用,这个引用就叫做闭包。

1 function foo(){
2         var a = 2;
3         function bar(){
4             console.log(a);
5         }
6         return bar;
7 }
8 var baz = foo();
9 baz(); //2

  • 函数bar的词法作用域能够访问到foo的内部作用域,然后我们将bar函数本身当作一个函数值类型进行传递。
  • foo()执行后,根据javascript引擎垃圾回收机制,由于看上去foo()内容不会再被使用,通常foo()整个内部作用域都会被销毁 。
  • 而闭包的神奇之处正是可以阻止该事件发生,因为bar()依然再使用这个内部作用域,所以无法回收。
  • 根据bar()所声明位置,它拥有涵盖foo()内部作用域的闭包,使得该作用域一直存活,以供之后任何时间引用。
  • bar()依然持有对该作用域的引用,而这个引用,就叫做闭包。

无论使用任何方式对函数类型的值进行传递,当函数在别处被调用时都可以观察到闭包。 无论通过任何手段将内部函数传递到所在词法作用域以外,它都会持有对原始定义作用域的引用,无论在何处执行这个函数都会使用闭包。 

摘自大公爵ddamy.com

转载于:https://www.cnblogs.com/webhb/p/6022468.html

Javascript闭包概念剖析相关推荐

  1. javascript闭包—围观大神如何解释闭包

    闭包的概念已经出来很长时间了,网上资源一大把,本着拿来主意的方法来看看. 这一篇文章 学习Javascript闭包(Closure) 是大神阮一峰的博文,作者循序渐进,讲的很透彻.下面一一剖析. 1. ...

  2. JavaScript学习总结(十六)——Javascript闭包(Closure)

    闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现.很早就接触过闭包这个概念了,但是一直糊里糊涂的,没有能够弄明白JavaScript的闭包到底是什 ...

  3. JavaScript闭包如何工作?

    您将如何向了解其闭包概念(例如函数,变量等)的人解释JavaScript闭包,但却不了解闭包本身? 我已经在Wikipedia上看到了Scheme示例 ,但是不幸的是它没有帮助. #1楼 我知道已经有 ...

  4. 让你分分钟理解 JavaScript 闭包

    原文:https://www.cnblogs.com/onepixel/p/5062456.html 让你分分钟理解 JavaScript 闭包 闭包,是 Javascript 比较重要的一个概念,对 ...

  5. [转载]深入理解JavaScript闭包(closure)

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

  6. [转]Javascript 闭包

    [转]Javascript 闭包 简介 Closure 所谓"闭包",指的是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分. 闭 ...

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

    闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现. 一.变量的作用域 要理解闭包,首先必须理解Javascript特殊的变量作用于.变量作用域包括 ...

  8. 深入浅出Javascript闭包

    深入浅出Javascript闭包 一.引子 闭包(closure)是 JavaScript 语言的一个难点,面试时常被问及,也是它的特色,很多高级应用都要依靠闭包实现.本文尽可能用简单易懂的话,讲清楚 ...

  9. JavaScript闭包的底层运行机制

    转自:http://blog.leapoahead.com/2015/09/15/js-closure/ 我研究JavaScript闭包(closure)已经有一段时间了.我之前只是学会了如何使用它们 ...

最新文章

  1. 数据呈现 | 20大数据可视化工具测评
  2. java通过url读取远程数据并保持到本地
  3. 杰夫 · 贝佐斯:事情瞬息万变,需要马上行动
  4. 调查:Android的领先地位稳固
  5. 汇编语言学习笔记-按指定的字体输出文本
  6. [转载]为什么不推荐使用stop和suspend这两个方法?
  7. Google第一女神李飞飞,从洗碗工蜕变成为首席科学家
  8. 【JS 逆向百例】有道翻译接口参数逆向
  9. HTML5新的解析顺序,HTML5新表单新功能解析
  10. 南阳市服务器主机销售,南阳市服务器价格
  11. TechNet 晒文 - Windows 7 系列汇总
  12. 【Computer Organization笔记02】指令系统、MIPS指令系统简介、THCO MIPS指令系统、THINPAD指令模拟器
  13. ios ffmpeg audio decode
  14. 关于指针函数以及函数指针的一些理解
  15. vb 获取系统声音的电平_音响系统速成方法学习资料
  16. Flutter中的Isolate的个人理解
  17. 量子计算机 叉院,清华团队首次实现量子GAN 准确率98.8%
  18. unity 刷新layout_【Unity源码学习】Layout
  19. Exynos4412 IIC总线驱动开发(一)—— IIC 基础概念及驱动架构分析 (iic驱动框架,i2c驱动框架)...
  20. Spring Boot 异步线程静态获取request对象为空 RequestContextHolder 为空 Java 异步线程获取request为空

热门文章

  1. maven依赖,聚合和继承
  2. webService学习4:客户端调用服务端的代码
  3. ajax post传送数组以及java后台接收数组
  4. linux用户组建立,查看等
  5. SpringMVC @ModelAttribute详解
  6. [JS] 修改Navigator对象
  7. Linux下内存泄露工具
  8. opencv读取图片、视频、摄像头
  9. spark mllib和ml类里面的区别
  10. 技术 KPI 的量化