Javascript - goodparts里关于闭包的读书笔记

作用域的好处是内部函数可以访问定义它们的外部函数的参数和变量,内部函数拥有比它的外部函数更长的生

命周期。

var Book = function(name) {

return {

get_name: function() {

return name;

}

};

};

var book = Book("javascript");

函数可以访问它被创建时所处的上下文环境

理解内部函数能访问外部函数的实际变量而无须复制是很重要的。这个知识点的关键在“能直接访问” + “无须复制”:

使用这段代码测试:

var aa = function() {

var result = []

for( var i = 0; i < 4; i++) {

result.push( function() {

console.log(i);

});

}

return result;

}

var functionList = aa();

for( var j = 0; j < functionList.length; j++){

functionList[j]();

}

第一次循环:闭包内的 i 等于 外部函数的i:

第二次循环之后,两个闭包内的i都变为1了:

因此,毫无疑问,最后的输出结果是4个4:

solution:如下代码将打印0,1,2,3:

function geneator(i) {

return function() {

console.log(i);

};

}

var aa = function() {

var result = []

for( var i = 0; i < 4; i++) {

result.push( geneator(i));

}

return result;

}

var functionList = aa();

for( var j = 0; j < functionList.length; j++){

functionList[j]();

}

第一次循环:

第二次循环:

核心思想就是“避免在循环中创建函数,先在循环之外创建一个辅助函数,让这个辅助函数再返回一个绑定了当前i值的函数”

时间: 2024-11-01 02:01:27

Javascript - goodparts里关于闭包的读书笔记的相关文章

《JavaScript设计模式与开发实践》读书笔记之观察者模式

1.<JavaScript设计模式与开发实践>读书笔记之观察者模式 观察者模式定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都将得到通知. JavaScript中通常采用事件模型替代传统的观察者模式 1.1 逐步实现观察者模式 以客户看房为例 首先指定谁充当发布者,如售楼处 然后给发布者添加一个缓存列表,用于存放回调函数以便通知订阅者.这里为了让订阅者只接收自己感兴趣的消息,增加一个标识key 最后发布消息时候,发布者遍历缓存列表,依次触发里面存放的订阅者的回

《众妙之门 JavaScript与jQuery技术精粹》 - 读书笔记总结[无章节版][1-60]

近期,反复思考后,还是把所有的笔记通过随笔的方式整理出来放在论坛里,可以让自己对学过的知识有个比较系统而清晰的呈现: 同时,为以后用到相关的知识点做一个整理和查阅. (一)JSON-P 的实例代码展示 1 <div id="delicious"></div> 2 <script type="text/javascript"> 3 // 可以在JavaScript中直接使用JSON,并且封装在函数调用中时,可作为API的返回值. 4

《JavaScript设计模式与开发实践》读书笔记之享元模式

1. 享元模式 享元模式是一种用于性能优化的模式,享元模式的核心是运用共享技术来有效支持大量细粒度的对象 1.1 传统的文件上传方法 以文件上传为例,文件上传功能可以选择依照队列,一个一个的排队上传,也支持同时选择2000个文件.假如每一个文件都对应着一个JavaScript上传对象的创建,2000个文件就会同时创建2000个upload对象假设这里的文件上传支持插件和flash两种 var id=0; window.startUpload=function(uploadType,files){

《javascript设计模式与开发实践》读书笔记(一)

一.高阶函数 1.函数作为参数传递 最经典的例子就是毁掉函数 var fs = require('fs'); fs.readFile('test.txt',function(data,err){ console.log(data); }); 2.函数作为返回值 作为返回值时候,要注意此时的this指向. 3.函数柯里化 函数柯里化指首先接受一些参数,接受到的参数后不立即执行,而是返回一个新函数,刚才传入的参数在函数形成的闭包中被保存起来,待到真正求值的时候刚才保存的参数才会真正的求值. var

《JavaScript核心概念及实践》-- 读书笔记

前言: 程序设计语言主要分为两种  1.基于存储原理(冯*诺依曼体系)的命令式编程语言,如C/C++.Java.Object Pascal(DELPHI).                              2.根据阿隆左*丘琦的lambda演算而产生的函数式编程语言,如Lisp.Scheme.                              这两种语言互不干涉的时代(javascript出现以前),程序=数据结构+算法                            

《JavaScript设计模式与开发实践》读书笔记之模板方法模式

1. 模板方法模式 1.1 面向对象方式实现模板方法模式 以泡茶和泡咖啡为例,可以整理为下面四步 把水煮沸 用沸水冲泡饮料 把饮料倒进杯子 加调料 首先创建一个抽象父类来表示泡一杯饮料 var Beverage=function(){}; Beverage.prototype.boilWater=function(){ console.log('把水煮沸'); }; Beverage.prototype.brew=function(){};//空方法,由子类重写 Beverage.prototy

Professional JavaScript for Web Developers 3rd Edition ---读书笔记

1. DOMContentLoaded DOM树构建完成时触发该事件 load 页面加载完毕触发 原生js document.addEventListener('DOMContentLoaded', function(){ //code..... }, false); document.addEventListener('load', function(){ //code... }, false); jquery //DOMContentLoaded $(document).ready(func

《JavaScript设计模式与开发实践》读书笔记之命令模式

1.命令模式 1.1 传统的命令模式 命令模式的应用场景:请求的发送者和请求接收者消除彼此耦合关系 以页面点击按钮为例 点击按钮后,借助命令对象,解开按钮和负责具体行为对象之间的耦合 <body> <button id='button1'>按钮1</button> <button id='button2'>按钮2</button> <button id='button3'>按钮3</button> </body>

javascript高级程序设计第三版 读书笔记

第三章   基本概念 1.在JavaScript中是区分大小写的,第一个字符是字母 _ 或者$,其他字符可以试数字 字母 _ 或者$,命名格式要求是驼峰式书写(第一个字母小写,剩下的每个有意义的单词开头大写  比如fontSize) 2.单行注释//  块级注释为/*多行 内容*/ 不得使用关键字和保留字 3.在JavaScript中变量是松散型的   可以为任何一种类型 4.用var操作符定义的变量成为定义该变量的作用域中的局部变量. function test(){ var i = 'hi'