跟java,php等编程语言一样,javascript也采用词法作用域,简单的来说就是函数的执行依赖于变量的作用域,这个作用域是在函数定义时决定的,而不是函数调用时决定的。为了实现这种词法作用域,还必须引用当前的作用域链。函数对象可以通过作用域链相互关联起来,函数体内部的变量都可以保存在函数作用域内,这种特性称之为“闭包”。

理解闭包首先要了解嵌套函数的词法作用域规则。如下图所示:

show函数声明了一个局部变量,并定义了一个函数f,函数f返回了这个变量的值,最后将函数f放入执行结果返回。

现在我们来改动下代码,看看结果又会是什么?

在上面的代码中,将函数内的一对圆括号移动到了f()后。f()现在仅仅返回函数内嵌套的一个函数对象,而不是直接返回结果。在定义函数的作用域外面,调用这个嵌套的函数(包含最后一行代码的最后一对圆括号)会发生什么事情呢?

想必大多数的人都知道了结果,是返回198,而不是v客学院。,因为嵌套的函数f()定义在这个作用域链里,其中的变量a一定是局部变量,不管在何时何地执行f(),这种绑定在执行f()时依然有效。简言之:闭包的这个特性可以捕捉到局部变量(和参数),并一直保持下来,看起来想这些变量绑定到了在其中定义他们的外部函数。

(php开发,web前端,ui设计,vr开发专业培训机构,v客学院版权所有,转载请注明出路,谢谢!!!)

最新文章

  1. 【荐】PHP Session和Cookie,Session阻塞,Session垃圾回收,Redis共享Session,不推荐Memcached保存Session
  2. erlang中的lists:foldl()的用法,格式转换实例应用
  3. 使用Apriori算法和FP-growth算法进行关联分析
  4. Java——String.split()函数
  5. Java SE 6 新特性: 编译器 API
  6. HDU 1131 Count the Trees
  7. 具体评论ExpandableListView显示和查询模仿QQ组列表用户信息
  8. Hadoop,master和slave简单的分布式搭建
  9. vs2015企业版密钥
  10. [TCP/IP] 传输层-TCP和UDP的使用场景
  11. Max answer(单调栈+ST表)
  12. 常见排序算法整理(python实现 持续更新)
  13. J2EE快速开发框架
  14. Windows跨域远程连接防火墙设置
  15. 2017/05/08 java 基础 随笔
  16. Spring Boot/Spring Cloud、ESB、Dubbo
  17. java编译优化
  18. 【POJ】2774 Long Long Message
  19. .NET中的那些受特别对待的类型(CriticalFinalizerObject)
  20. [AIR] AS3读取txt文档

热门文章

  1. WizTree——一个扫描快似Everything的硬盘空间分析工具
  2. 在centos上安装docker
  3. oracle数据库归档日志量陡增分析
  4. Spring事件发布与监听机制
  5. R-常见错误
  6. 理解css行高(line-height)
  7. jquery combo.select. 下拉选择插件
  8. 『心善渊』Selenium3.0基础 — 20、Selenium对Cookie的操作
  9. Libevent2.1.8版在Liunx中编译安装遇到的问题
  10. Rsync+Sersync数据实时同步(双向)