因为你不比较同一件事。在您的示例中-您将函数声明 function foo()...
与变量声明和赋值进行比较var foo = 'bar';
更正确的比较是:
console.log(foo);
var foo = 'bar';
和
console.log(foo());
var foo = function() {
return 'bar';
}
由于提升的工作方式,功能声明的解释不同。提升将所有声明移动到最近范围的顶部,同时将分配留在原处。
函数声明在这个意义上是特殊的,因为它在一个语句中既是声明又是表达式/赋值,因此被提升在一起。
例如:您可以查看以下表达式:
console.log(foo);
var foo = 'bar';
像这样:
var foo;
console.log(foo); //prints undefined
foo = 'bar';
和
console.log(foo());
var foo = function() {
return 'bar';
}
像这样:
var foo;
console.log(foo());
foo = function() {
return 'bar';
}