JavaScript高级程序设计(第三版) 7/25
第七章
函数表达式
1.定义函数的方式有两种,一种是函数声明,一种是函数表达式。
//函数声明 function fuc (a){ }
//函数表达式 var fuc = function(a){ }
2.函数声明提升,执行代码前会先读取函数声明,所以函数声明可以先用后声明。
3.递归,一个函数通过名字调用自身的情况,如(也可以用循环解决递归问题)
function func(num){ if(num <= 1){ return 1; } else { return num * func(num-1); } }
这个的问题是复用性不高,如果修改了函数的名字,里面的也要修改,所以可以改成,arguments.callee来替代函数名,是一个指向正在执行的函数的指针。
4.闭包,指的是有权访问另一个函数作用域中的变量的函数。常见创建闭包的方式,在一个函数的内部创建另一个函数。
一般来讲,当函数执行完毕后,局部活动对象就会被销毁,内存中仅保存全局作用域(全局执行环境的变量对象)。但是,闭包的情况又有所不同。相当于延展函数作用域,但是过度使用闭包的话可能会导致内存占用过多,所以使用需慎重。
5.闭包保存的是整个变量对象,而不是某个特殊的变量。