我试图理解为什么这段代码执行其方式:
doStuff();
console.log(bar);
var bar = 'bar';
function doStuff() {
var foo = 'foo'
console.log(foo);
}
输出为:
app.js:9 foo
app.js:3 undefined
所以我在这里的理解是,在执行上下文的创建阶段,引擎在内存中设置了变量,但是没有赋值,这就是bar
是undefined
的原因。
我不明白为什么要分配foo
并在同一阶段注销一个值。
有些解释将不胜感激。
答案 0 :(得分:1)
function doStuff() {
var foo = 'foo'
console.log(foo);
}
var bar;
doStuff();
console.log(bar);
bar = 'bar';
您可以想象您的代码将按照我列出的顺序悬挂和解释。在吊装过程中,将仅吊装变量声明,但值分配保持在相同位置。因此,当控制台日志记录栏将返回undefined
答案 1 :(得分:1)
函数声明被悬挂,函数表达式未被悬挂。
isHoisted();
function isHoisted() {
console.log("Yes!");
}
isNotHoisted(); // error
var isNotHoisted = function () {
console.log("NO!");
}