JavaScript第七章
-
定义函数的 方式:
-
函数声明
function functionName(arg0, arg1, arg2) {
//函数体
}
首先是 function 关键字,然后是函数的名字。是在执行 代码之前会先读取函数声明,可以把函数声明放在调用它的语句后面。
-
函数表达式
var functionName = function(arg0, arg1, arg2){
//函数体
};
创建一个函数并将它赋值给变量 functionName。 这种情况下创建的函数叫做匿名函数(anonymous function)。
-
注意
-
函数表达式与其他表达式一样,在使用前必须先赋值
-
函数声明与函数表达式之间的区别
-
-
-
递归
- callee方法 是一个指向正在执行的函数的指针,因此可以用它来实现对函数 的递归调用
-
闭包
-
指有权访问另一个 函数作用域中的变量的函数
-
创建闭包的方式
-
是在一个函数内部创建另一个函数
-
理解作用链(也就是作用域)
-
-
闭包与变量
- 闭包只能取得包含函数中任何变量的 后一个值"有点不明白"
-
关于this对象
-
this 和 arguments。内部函 数在搜索这两个变量时,只会搜索到其活动对象为止,因此永远不可能直接访问外部函数中的这两个变 量
-
var that = this;
把 this 对象赋值给了一个名叫 that 的变量。而在定义了闭包之后,闭包也可以访问这个变量,因为它是我们 在包含函数中特意声名的一个变量.
-
-
内存泄漏
-
如果闭包的作用域链中保存着一个 HTML元素,那么就意味着该元素将无法被销毁
-
解决方法:与this对象的解决方法类似,不过最后记得把元素变量设置为unll
-
-
-
模仿块级作用域
-
JavaScript 没有块级作用域的概念。这意味着在块语句中定义的变量,实际上是在包含 函数中而非语句中创建。
-
(function(){ //这里是块级作用域 })();
将函数声明转换成函数表达式然后在后面一个括号里面调用。(避免多次声明了同一个变量)
-
-
私有变量
-
JavaScript 中没有私有成员的概念,所有对象属性都是公有的,。不过,有一个私有 变量的概念。
定义:任何在函数中定义的变量,都可以认为是私有变量,因为不能在函数的外部访问这些变量。 私有变量包括函数的参数、局部变量和在函数内部定义的其他函数
-
访问私有变量的公有方法
在这个函数内部创建一个闭包,闭包通过自己的作用域链可以访 问这些变量。
-
在构造函数中定义特权方法
this.publicMethod = function (){
privateVariable++; //私有变量和私有函数
return privateFunction(); };
-
缺点
-
必须使用构造函数模式来达到这个目的
-
-
-
静态私有变量(初始化未经声明的变量,总是会创建一个全局变量。 )
也就是静态加私有的变量
-
模块模式
-
单例:,指的就是只有一个实例的对象
-
模块模式是为单例创建私有变量和特权方法。
-
在需要对单例进行某些初始化,同时又需要维护其私有 变量时使用
-
-
增强的模块模式
- 在返回对象之前加入对其增强的代码。这种增强的模块模式适合那 些单例必须是某种类型的实例,同时还必须添加某些属性和(或)方法对其加以增强的情况。
-
-
小结
-
这一章感觉难了好多,前面的函数部分还好,到了后面的,说实话看了一遍感觉还是模模糊糊感觉好像在前面的时候关于作用链还有一些其他的基础的概念就不是很清楚,现在就更加的模糊了,在后面这个模块模式好像没有很清楚。