JavaScript范围发生了变化?为什么会这样?

use*_*508 5 javascript scope hoisting

调用构造函数a时,'a'的值似乎失去了全局范围.

var a = 6;

function b() {
    a = 10;

    function a() {}
    console.log(a); //10
}
b();
console.log(a); //6
Run Code Online (Sandbox Code Playgroud)

Tra*_*s J 6

由于可变提升,订单解释如下所示.请注意,正如@ShadowCreeper正确指出的那样,function a(){}实际上是a在函数b中创建一个局部变量,该变量被挂起,如下所示.

var a;
var b;

a = 6;
b = function() {
 var a;
 a = function(){};
 a = 10;
 console.log(a); //10
}
b();
console.log(a); //6
Run Code Online (Sandbox Code Playgroud)