在这个例子中,我知道它将打印undefined
。
var bar = typeof foo;
var foo = function() {
console.log('abcd');
}
foo();
console.log(bar); // -> undefined
所以我理解,当变量被提升时,bar
仍然高于foo
,但foo
会被执行,所以解释器不应该知道foo
是什么?
注意:我正在尝试理解解释器的工作原理。我的问题不是如何修复上面的代码段。
答案 0 :(得分:5)
如果您考虑变量定义提升,您的代码就相当于:
var bar;
var foo;
// foo does not yet have a value, so it it's still undefined
bar = typeof foo;
// foo gets a value here
foo = function() {
console.log('abcd');
}
// since foo got a value in the previous statement, you can now execute it here
foo();
console.log(bar);
只提升变量定义本身,而不是分配。
因此,您可以从此排序中看到,当您执行bar = typeof foo
时,foo
还没有值,因此您将undefined
分配给bar
。
功能定义如:
function foo() {
console.log('abcd');
}
也被悬挂,所以如果你这样定义foo
,那么这将是一个不同的故事。但是您使用的功能分配本身并未悬挂。您定义foo
的方式,它只是一个像其他任何变量一样的变量。