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

第七章 函数表达式

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

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

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

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

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
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.模仿块级作用域的匿名函数的语法:

1
2
3
4
(function(){
       //这里是块级作用域
 
})();

  

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

1
2
3
4
5
6
7
var someFunction = function(){
 
   //这里是块级作用域
 
};
 
someFunction();

  

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

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

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

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

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

posted on   rain1  阅读(161)  评论(0编辑  收藏  举报

编辑推荐:
· 智能桌面机器人:用.NET IoT库控制舵机并多方法播放表情
· Linux glibc自带哈希表的用例及性能测试
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
阅读排行:
· 手把手教你在本地部署DeepSeek R1,搭建web-ui ,建议收藏!
· 新年开篇:在本地部署DeepSeek大模型实现联网增强的AI应用
· 程序员常用高效实用工具推荐,办公效率提升利器!
· Janus Pro:DeepSeek 开源革新,多模态 AI 的未来
· 【译】WinForms:分析一下(我用 Visual Basic 写的)

导航

< 2025年1月 >
29 30 31 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31 1
2 3 4 5 6 7 8

统计

点击右上角即可分享
微信分享提示