JavaScript如何提升变量?

Asa*_*bal 4 javascript scope

我知道JavaScript将所有变量声明移动到函数的顶部.但是,我在下面的console.log()中期望得到相同的结果.但是,我在第一种情况下获得NaN,在第二种情况下获得4次.

有人可以解释一下吗?我知道在StackOverflow上已经有类似的问题已经问过并回答了,但是这个问题与函数定义有关.例如,JavaScript是否将函数变量移动到变量声明的末尾?

var doB = function() { return a+1};
var b = a+1;
var a = 3;
console.log(b); // NaN
console.log(doB()); // 4
Run Code Online (Sandbox Code Playgroud)

Ian*_*Ian 5

由于提升,这是您的代码在技术上看起来像:

var doB, b, a;
doB = function() {
    return a+1;
};
b = a + 1;
a = 3;
console.log(b); // NaN
console.log(doB()); // 4
Run Code Online (Sandbox Code Playgroud)

因为代码是从上到下执行的,所以当b初始化为时a + 1,a尚未初始化为任何东西(它是undefined).所以真的,b试着被设定为undefined + 1,即NaN