函数有两种模式:函数定义与函数表达式。
函数定义是在任何语言中都会遇见的,这里不再多说了。
函数表达式: 是作为表达式在代码中出现,当程序运行到此处时,才执行这部分的代码内容。
函数字面量组成部分:
第一部分,关键词 function
第二部分,函数名,但是可有可无。
第三部分,包含在括号内的参数,当然参数也是可有可无的,括号不能少。
第四部分,是一组包裹在大括号的语句块,也就是函数要执行的具体代码,可以为空。
第二部分,函数名,但是可有可无。
第三部分,包含在括号内的参数,当然参数也是可有可无的,括号不能少。
第四部分,是一组包裹在大括号的语句块,也就是函数要执行的具体代码,可以为空。
例如
function () {}
这个写法符合上面4条规则,但却不是表达式,运行会报语法错误。
只有当作表达式的时候才能正常执行。
1. (function () {}); 2. var a = function () {}; 3. var obj = {fn: function () {}};
再来看个
var fn = function test() {};
这个也是函数字面量,test 是这个函数的名字,但是只对函数体内可见,外部是不可调用的。
var fn = function test() { console.log(test); }; console.log(fn); // function test() { console.log(test); }; fn(); // function test() { console.log(test); }; console.log(test); // 报 test 未定义
这里的函数名可用于内部使用,比如递归调用的时候,会很方便。
为什么不用 arguments.callee 呢。很多地方都可以看到说 arguments 是把双刃剑,是性能杀手,能避免就尽量避免使用。
加一个函数名,调用方便,性能极致,对项目压缩也有好处,何乐而不为呢?