我正在通过《面向 Web 开发人员的专业 JavaScript 第 3 版》这本书学习 JavaScript。并且在第7章的7.1节中,作者举了一个例子来实现执行函数与函数名的解耦:
var factorial = (function f(num) {
if (num <= 1) {
return 1;
} else {
return num * f(num - 1);
}
});
上面的代码无论是否在严格模式下都运行良好。正如我之前看到的,代码分两步工作:
首先:声明函数 f
function f(num) {
if (num <= 1) {
return 1;
} else {
return num * f(num - 1);
}
}
第二:将函数名f赋给变量factorial
var factorial = f;
所以我认为在下面的例子中直接调用函数 f 是可行的。
var factorial = (function f(num) {
if (num <= 1) {
return 1;
} else {
return num * f(num - 1);
}
});
f(5);
但实际上,它不起作用。控制台说“f不是函数”;为什么?与关闭有什么关系吗?