00.函数声明提升(function declaration hoisting):执行代码之前会先读取函数声明。
01.匿名函数(anonymous function)
var sayHi = function() {};
02.闭包:指有权访问另一个函数作用域中的变量的函数。
例如:
function createComparisonFunction(propertyName) {
return function (object1, object2) {
var value1 = object1[propertyName];
var value2 = object2[propertyName];
}
}
03.作用链本质上是一个指向变量的指针列表,他只引用但不实际包含变量对象。
04.this对象是在运行时基于函数的执行环境绑定的:在全局函数中,this等于window,而当函数被作为某个对象的方法调用时,this等于那个对象。不过,匿名函数的执行环境具有全局性,因此其this对象通常指向window。内部函数在搜索这两个变量时,指挥搜索到其活动对象位置,因此永远不可能直接访问外部函数中的这两个变量。
05.任何在函数中定义的变量,都可以认为是私有变量,因为不能在函数的外部访问这些变量。私有变量播啊阔函数的参数、局部变量和函数内部定义的其他函数。
06.到底是使用实例变量,还是静态私有变量,最终还是要视你的具体需求而定。
07.所谓单例(singeton),指的就是只有一个实例的对象。
08.从本质上来讲,这个对象字面量定义的是单例的公共接口。
09.小结
a.函数表达式不同于函数声明。函数声明要求有名字,但函数表达式不需要。没有名字的函数表达式也叫作匿名函数
b.在无法确定如何引用应用函数的情况下,递归函数就会变得比较复杂
c.递归函数应始终argumnets.callee来递归地调用自身,不要使用函数名——函数名可能会发生变化。
d.在后台执行环境中,闭包的作用链包含着它自己的作用域、包含函数的作用于和全局作用域
e.函数的作用域及其所有变量都会在函数执行结束后背销毁
f.当函数返回一个闭包时,这个函数的作用域将会有izhi在内存中保存到闭包不存在位置。
g.即使JavaScript中没有正式的私有对象属性的概念,但可以使用闭包来实现共有方法,而通过公有方法可以访问在包含作用于中定义变量
h.有权访问私有变量的共有方法叫做特权方法
i.可以使用构造函数模型、原型模式来实现自定义类型的特权方法,也可以使用模块模式、增强的模块模式来实现单利的特权方法。
j.
k.