var factorial = (function f(num) {
if (num<=1) {
return 1;
} else {
return num*f(num-1);
}
});
这是javascript高级程设计中讲解函数递归调用的一个实例,我不明白是为何=右边的函数声明式被一对圆括号包裹。
另外,我知道函数声明式外加圆括号是强制转换为函数表达式,但这种用法一般不是用于使匿名函数立即执行吗?这里这样写,而且是非匿名函数,目的是什么呢?
为function(){}有两种用法。
当function关键字出现在行首(语句首),它是一条“语句”。
当function关键字不是出现在行首(语句首),它就是一条“函数表达式”。
一般立即执行的匿名函数要加括号的主要作用就是不让function关键字出现在行首(语句首)。
而你这个代码 function关键字本来就不是出现在行首(语句首),从语法上来说可以不加括号。
但加上括号能让人更容易理解为这是“函数表达式”,而不是“语句”。