JavaScript高级程序设计(第3版)第七章读书笔记

第七章 函数表达式

1. 函数声明有一个重要特征 ,函数声明提升。即在执行代码之前会先读取函数声明,意味着可以把函数声明放在调用它的语句后面。

2. 使用arguments.callee实现对函数的递归调用。但在严格模式下,不能通过脚本访问arguments.callee,但可以使用命名函数表达式来达成相同的效果。

3. 闭包是指有权访问另一个函数作用域中的变量的函数。创建闭包的常用方式,就是在一个函数内部创建另一个函数。

4. 由于闭包会携带包含它的函数的作用域,因此会比其他函数占更多的内存。慎重使用。

5. 闭包只能取得包含函数中任何变量的最后一个值。闭包所保存的是整个变量对象。

6. 在闭包中使用this对象也可能导致一些问题,匿名函数的执行环境具有全局性,因此其this对象通常指向window。

var name = "The window";

var object = {

         name: "My Object",

         getNameFunc :function(){

                   return this.name;

         }

};

console.log(object.getNameFunc());    // My Object

var name = "The window";

var object = {

         name: "My Object",

         getNameFunc :function(){

                   return function(){

                            return this.name;

                   };

         }

};

console.log(object.getNameFunc()());    //The window

  

把外部作用域中的this对象保存在一个闭包能够访问到的变量里,就可以让闭包访问该对象了。

 1 var name = "The window";
 2
 3 var object = {
 4
 5          name: "My Object",
 6
 7          getNameFunc :function(){
 8
 9                    var that=this;
10
11                    return function(){
12
13                             return that.name;
14
15                    };
16
17          }
18
19 };
20
21 console.log(object.getNameFunc()());   // My Object

7. 闭包在IE9之前的版本中会导致一些特殊的问题,如果闭包的作用域链中个保存着一个HTML元素,那么就意味着该元素将无法被销毁。

8.模仿块级作用域的匿名函数的语法:

(function(){
       //这里是块级作用域

})();

  

以上代码定义并立即调用了一个匿名函数,将函数声明包含在一对圆括号中个,表示它实际上是一个函数表达式,而紧随其后的另一对圆括号会立即调用干这个函数。为建党,可以写成这样:

var someFunction = function(){

   //这里是块级作用域

};

someFunction();

  

注意:函数表达式后面可以接圆括号,但是函数声明后面不可接圆括号,将函数声明嘉善跟一对圆括号即可转换成函数表达式。

9. 模仿块级作用域的做法经常在全局作用域中被用在函数外部,从而限制向全局作用域中添加过多的变量和函数。这种做法可以减少闭包占用的内存问题,因为没有直线搞匿名函数的引用,只要函数执行完毕,就可以立即销毁其作用域链了。

10. 任何在函数中定义的变量,都可以认为是私有变量,因为不能在函数的外部访问这些变量。

11. 有权访问私有变量和私有函数的公有方法称为特权方法。第一种是在构造函数中定义特权方法。特权方法作为闭包有权访问在构造函数中定义的所有变量和函数。

静态私有变量,通过在私有作用域中定义私有变量或函数,创建特权方法。这个模式在定义构造函数时并没有使用函数声明,而是使用了函数表达式。

时间: 2024-08-07 19:25:41

JavaScript高级程序设计(第3版)第七章读书笔记的相关文章

读Javascript高级程序设计第三版第六章面向对象设计--创建对象

虽然Object构造函数或者对象字面量都可以用来创建单个对象,但是缺点非常明显:使用同一接口创建很多对象,会产生大量重复代码. 工厂模式  1 function CreatePerson(name,age,job){ 2         var o=new Object(); 3         o.name=name; 4         o.age=age; 5         o.job=job; 6         o.sayName=function(){ 7            

JavaScript高级程序设计(第3版) 中文pdf扫描版 89M 高清下载

<JavaScript高级程序设计(第3版)>是JavaScript超级畅销书的最新版.ECMAScript5和HTML5在标准之争中双双胜出,使大量专有实现和客户端扩展正式进入规范,同时也为JavaScript增添了很多适应未来发展的新特性. <JavaScript高级程序设计>这一版除增加5章全新内容外,其他章节也有较大幅度的增补和修订,新内容篇幅约占三分之一. 全书从JavaScript语言实现的各个组成部分——语言核心.DOM.BOM.事件模型讲起,深入浅出地探讨了面向对象

Android深度探索——第七章读书笔记及心得

控制发光二极管 ——第七章读书笔记及心得 通过本章的学习掌握了一个真正和硬件打交道的linux驱动程序.知道了一个完整的linux驱动只要由内部处理与硬件交互两部分组成.其中的内部处理指linux驱动的装载.卸载.与设备文件相关的动作处理以及业务逻辑.与硬件交互主要是指通过部分函数与硬件中的寄存函数进行数据交互. Linux驱动直接与硬件打交道,但是并不是linux启动直接向硬件中的内存写数据,而是与本机的I/O内存进行交互.每一个连接linux的硬件在I/O内存中都会有映射首地址. 创建LED

第七章读书笔记《深入理解计算机系统》

第七章 读书笔记<深入理解计算机系统> 链接是将各种代码和数据部分收集起来并组合成为一个单一文件的过程,这个文件可被加载(或拷贝)到存储器并执行. 链接可以执行于编译时,也就是在源代码被翻译成机器代码时:也可以执行于加载时,也就是在程序被加载器加载到存储器并执行时:甚至执行于运行时,由应用程序来执行. 在早期的计算机系统中,链接是手动执行的.在现代系统中,链接是由叫链接器的自动执行的. 7.1 编译器驱动程序 1.大部分编译系统提供编译驱动程序:代表用户在需要时调用语言预处理器.编译器.汇编器

《深入了解计算机系统》第七章读书笔记

<深入了解计算机系统>第七章读书笔记 第一部分:链接 链接定义:链接是将各种代码和数据部分收集起来并组合成为一个单一文件的过程,这个文件可被加载(或被拷贝)到存储并执行. 第二部分:目标文件 目标文件:目标文件用以存放目标代码和由编译器或汇编器生成的相关数据的计算机文件格式称为目标文件格式. 目标文件格式有许多不同的种类.最初每种类型计算机都拥有自身独特的格式,但随着Unix和其他可移植操作系统的问世,人们定义了例如COFF和ELF这些格式,并在不同的系统上使用它们.通常,链接器的输入和输出使

《JavaScript高级程序设计》(第二版)

这本书的作者是 Nicholas C.Zakas ,博客地址是 http://www.nczonline.net/ ,大家可以去多关注,雅虎的前端工程师,是YUI的代码贡献者,可想而知这本书得含金量,他出的书都广受好评.这本书已经出了第二版,而且与第一版相比内 容更新很大,直接第二版就行.不要被书名的“高级”唬住,只要有JS基础语法知识和DOM基础知识就行,而且本书开始阶段还是介绍JS和DOM的语法知 识. 评论:重点推荐一下第五章(类型),第六章(OOP),第七章(匿名),多看几遍,至少要完全

《JavaScript高级程序设计(第3版)》.Nicholas.C.Zakas.扫描版.pdf

下载地址:网盘下载 内容简介 编辑 本书从最早期Netscape浏览器中的JavaScript开始讲起,直到当前它对XML和Web服务的具体支持,内容主要涉及JavaScript的语言特点.JavaScript与浏览器的交互.更高级的JavaScript技巧,以及与在Web应用程序中部署JavaScript解决方案有关的问题,如错误处理.调试.安全性.优化/混淆化.XML和Web服务,最后介绍应用所有这些知识来创建动态用户界面. 本书适合有一定编程经验的开发人员阅读,也可作为高校相关专业课程的教

C#高级编程第11版 - 第七章

导航 C# 全版本特性一览 全书目录 第七章 Arrays 7.1 相同类型的多个对象 151 7.2 简单数组 152 7.2.1 数组的声明 152 7.2.2 数组的初始化 152 7.2.3 访问数组元素 153 7.2.4 使用引用类型 153 7.3 多维数组 154 7.4 锯齿数组 155 7.5 Array 类 156 7.5.1 创建数组 156 7.5.2 复制数组 156 7.5.3 排序 157 7.6 数组作为参数 159 7.7 数组协变 159 7.8 枚举 16

软件工程 六、七章读书笔记

第六章 在第六章中主要是介绍了Scrum的方法论,在此方法的理论中,其原则主要强调了一个团队的互动互助的开发过程,重点强调了在一个项目里,一个团队是如何通过沟通产生进步,且这个沟通绝不是说有通信便可称之为“沟通”了,而是要有面对面的实时交流,虽然现在的通讯方式早已变得十分强大,但面对面的沟通仍是最有效率的交流方式,故而在此基础上又提出了一个新的团队合作活动——“每日立会”,这是在Sprint中我认为是十分有效的一个活动,将问题摆在明面上,大家互相了解各自的进度,一起解决项目中的问题,持续更新团队