不积跬步无以至千里,不积小流无以成江河。

关于闭包的解释,在《JavaScript权威指南》中讲的很透彻了。今天看了书中的一个段讲解,更加深了对闭包的理解,特此记下,以备查阅。

在同一个作用域链中定义两个闭包,这两个闭包共享同样的私有变量或变量。这是一种非常重要的技术,但还是要特别小心那些不希望共享的变量往往不经意间共享给了其他的闭包,请看下面这段代码:

//这个函数返回一个总是返回v的函数
function constfunc(v) { return function() {return v;};} //创建一个数组来存储常数函数
var funcs = [];
for(var i = 0; i < 10; i++) {
funcs[i] = constfunc(i);
} //在第5个位置的元素所表示的函数的返回值为5
funcs[5]() // => 5

这段代码利用循环创建了很多闭包,当写类似这种代码的时候往往会犯一个错误:那就是试图将循环代码移入定义这个闭包的函数之内,看下面这段错误演示代码,不要这样写

//返回一个函数组成的数组,它们的返回值是0~9
function constfuncs() {
var funcs = [];
for(var i = 0; i < 10; i++)
funcs[i] = function() {return i;};
return funcs;
} var funcs = constfuncs();
funcs[5]() //返回值是

上面这段代码创建了10个闭包,并将它们存储到了一个数组中。这些闭包都是在同一个函数调用中定义的,因此它们可以共享变量i。当constfuncs()返回时,变量i的值是10,所有的闭包都共享这一个值,因此,数组中的函数的返回值都是同一个值,这并不是我们想要的结果。关联到闭包的作用域链都是“活动的”,记住这一点非常重要。嵌套的函数不会将作用域链内的私有成员复制一份,也不会对所绑定的变量生成静态快照

最新文章

  1. Github+Jekyll —— 创建个人免费博客(一)从零开始
  2. 关于Repository、IUnitOfWork 在领域层和应用服务层之间的代码分布与实现
  3. Linux学习心得之 Linux下命令行Android开发环境的搭建
  4. Shell入门教程:流程控制(5)for 循环
  5. Enterprise Solution 开发框架功能点
  6. win7中的画图
  7. 如何创建可扩展表视图中的iOS 学习和拓展优化(有待更新)
  8. thinkphp 独立分组配置
  9. HTML5:基本使用
  10. 英蓓特Mars board的android4.0.3源码编译过程
  11. Java 多线程之内存一致性错误
  12. [Ahoi2005]LANE 航线规划
  13. 日版iphone5 SB 配合REBELiOS卡贴破解电信3G步骤
  14. 网上流行护眼色的RGB值
  15. Hdu1241 Oil Deposits (DFS)
  16. 网络(socket)编程
  17. c语言基础课第三次作业
  18. Python学习杂记
  19. 20155226 2016-2017-2 《Java程序设计》第6周学习总结
  20. drawImage

热门文章

  1. 巧用cssText属性
  2. php 关于锁的一些看法
  3. Centos7安装mysql缺乏yum源怎么安装
  4. ROS Learning-017 Arduino-For-ROS-002 第一个程序: Hello World
  5. STM32 C++编程 001 工程模板
  6. 杭电acm 1108题
  7. 巧用 git rebase 将某一部分 commit 复制到另一个分支
  8. java求几个数字的和输出详细步骤
  9. 1、Tomcat7性能监控与优化
  10. Redhat 6 git服务器配置 (git-daemon)