js完成吊装后的代码将如何显示?
jsFiddle显示它可以打印1,但那是真的吗?

var a = 1;
function b() {
    a = 10;
    return;
    function a() {}
}
b();
alert(a);


这是我想出的:

var a;              //hoisted var declaration
function b() {      //hoisted function declaration
    function a() {} //hoisted function declaration
    a = 10;
    return;
}
a=1;
b();
alert(a);

最佳答案

这是预期的行为。

var a = 1;
function b() {
    a = 10;
    return;
    function a() {}
}
b();
alert(a);


所有这些都与范围和定义函数有关。首先用代码字函数声明一个函数

function a(){};


将在解析时将功能添加到范围。即在b()的第一行之前定义。遗憾的是,您将a定义为b内部的loal变量。这将使全局变量b内部无法访问。 a将在b的范围内局部定义和操纵,而全局a则保持不变。

等效代码将是

var a = 1;
function b() {
    var a = function() {}
    a = 10;
    return;
}
b();
alert(a);

09-10 00:52
查看更多