函数表达式:
function 函数名称(可选)(参数:可选){函数体}。
之前不怎么理解:既然函数表达式里的函数名称可选,那有函数名与没函数名又有什么区别呢。
按照EMCA标准,函数表达式格式如下:
FunctionExpression :
function Identifier opt ( FormalParameterList opt ){ FunctionBody }
这种函数表达式又称有名函数表达式(named function expression),这个名称只能在函数内部使用
var f = function foo(){ return typeof foo; // "foo" is available in this inner scope }; // `foo` is never visible "outside" typeof foo; // "undefined" f(); // "function"
那使用有名函数表达式又有什么意义呢?
- 使调试更加方便
- 可以递归调用自己
a = function b(i) { if (i>10) { return i; } else { return b(++i); } } console.log(a(5)); // outputs 11 console.log(a(10)); // outputs 11 console.log(a(11)); // outputs 11 console.log(a(15)); // outputs 15
- 使匿名函数更有意义
参考资料: 1.Named function expressions demystified (http://kangax.github.io/nfe/)
2. 《你不知道的javascript(上卷)》P27-P28
3. What is the difference between a function expression vs declaration in JavaScript?
4 .深入理解JavaScript系列(2):揭秘命名函数表达式
5.使用函数表达式时,匿名函数和命名函数有区别吗?