【发布时间】:2018-11-05 12:11:42
【问题描述】:
我正在阅读“你不懂 JS”系列的第二本书,我已经在变量之前提升了 read that 函数。
所以这是代码:
foo(); // 1
var foo;
function foo() {
console.log( 1 );
}
foo = function() {
console.log( 2 );
};
这个输出将是 1。但是为什么呢?首先提升函数,然后提升变量。所以在我的函数 foo(打印 1 的那个)被提升之后,它必须跟着变量 foo。所以结果应该是“未定义”而不是“1”。
我希望代码表现得像以前一样:
// hoisted first
function foo() {
console.log( 1 );
}
// hoisted second
var foo; // implicitly initialized to 'undefined'
foo(); // call 'undefined' - error?
foo = function() {
console.log( 2 );
};
这里发生了什么?
【问题讨论】:
-
哦,微妙。我喜欢这个问题。
标签: javascript hoisting