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);