js-JavaScript高级程序设计学习笔记5

第七章 函数表达式

1、函数声明的一个重要特征就是函数声明提升,意思是在执行代码之前会先读取函数声明,因此可以把函数声明放在调用它的语句后面。

2、使用函数表达式创建的函数叫做匿名函数(拉姆达函数),因为function关键字后面没有标识符,匿名函数的name属性是空字符串。在调用前必须先赋值。

3、arguments.callee是一个指向正在执行的函数的指针,因此可以用它来实现对函数的递归调用,用它代替函数名,无论怎么调用函数都不会出问题。在严格模式下,不能通过脚本访问arguments.callee,可以使用命名函数表达式达到相同的结果。P178.

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

5、闭包会携带包含它的函数的作用域,因此会比其他函数占用更多的内存,过度使用闭包可能会导致内存占用过多。

6、闭包只能取得包含函数中任何变量的最后一个值,所以在循环中使用闭包要注意。

7、匿名函数的执行环境具有全局性,因此其this对象通常指向window

8、块级作用域(私有作用域)的匿名函数语法:

(function(){
    //块级作用域
})();

9、私有作用域经常用在全局作用域中,限制向全局作用域添加过多的变量和函数。一般来说,尽量少向全局作用域中添加变量和函数。

10、任何在函数中定义的变量,都可以认为是私有变量,因为不能在函数的外部访问这些变量。私有变量包括函数的参数、局部变量和函数内部定义的其他函数

11、有权访问私有变量和私有函数的公有方法称为特权方法。有两种在对象上创建特权方法的方式,一是在构造函数中定义特权方法,二是使用静态私有变量实现特权方法。

12、模块模式是为单例创建私有变量和特权方法。单例指的是只有一个实例的对象。如果必须创建一个对象并以某些数据对其进行初始化,同时还要公开一些能够访问这些私有数据的方法,那么就可以使用模块模式。

posted @ 2016-11-28 16:37  ZhangCui  阅读(301)  评论(0编辑  收藏  举报