考虑这两个片段:
Snippet#1
function countDownFn(num) {
if (num === 0) return;
console.log(num);
countDownFn(--num);
}
countDownFn(5); // prints 5, 4, 3, 2, 1 once per line
Snippet#2
var myCounter = function countDownExp(num) {
if (num === 0) return;
console.log(num);
countDownExp(--num);
};
myCounter(5); // prints 5,4,3,2,1 once per line
window.countDownFn
但无法找到window.countDownExp
?答案 0 :(得分:1)
var myCounter = function countDownExp(num) {
if (num === 0) return;
console.log(num);
countDownExp(--num);
}
countDownExp
是命名表达式。该名称仅在函数内部可用,并且在函数需要递归时使用。命名表达式只发生在函数表达式而不是函数声明。
答案 1 :(得分:0)
尝试将var myCounter = function countDownExp
更改为function countDownExp
,这将使其可用于窗口对象。
功能声明 function example(){}
提升整个功能。这意味着即使在编写函数的上方,该函数也可以使用。
功能表达 var example = function(){}
提升变量但是示例将是未定义的,直到将匿名函数分配给变量的代码行。
我更喜欢功能声明,因为我不必担心提升问题。