在上下文的创建阶段,吊装如何工作

时间:2018-06-19 12:06:19

标签: javascript html browser

我试图理解为什么这段代码执行其方式:

doStuff();
console.log(bar);

var bar = 'bar';

function doStuff() {
    var foo = 'foo'
    console.log(foo);
}

输出为:

app.js:9 foo
app.js:3 undefined

所以我在这里的理解是,在执行上下文的创建阶段,引擎在内存中设置了变量,但是没有赋值,这就是barundefined的原因。

我不明白为什么要分配foo并在同一阶段注销一个值。

有些解释将不胜感激。

2 个答案:

答案 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!");
}