我有这段代码
var a = 5;
function woot(){
console.log(a);
var a = 6;
function test(){ console.log(a);}
test();
};
woot();
我期待5和6作为输出,但我有未定义和6而不是。
有什么想法?。
答案 0 :(得分:4)
变量声明被提升到它们出现的范围的顶部。您的代码解释如下:
var a; // Outer scope, currently undefined
a = 5; // Outer scope, set to 5
function woot(){ // Function declaration, introduces a new scope
var a; // Inner scope, currently undefined
console.log(a); // Refers to inner scope 'a'
a = 6; // Inner scope, set to 6
function test(){ console.log(a);} // Refers to inner scope 'a' (now 6)
test();
};
woot();
当您在函数内声明变量时,该变量将 shadow 具有在祖先范围中声明的相同标识符的任何变量。在您的示例中,您在全局范围内声明a
。然后,在woot
函数的范围内声明另一个具有相同标识符的变量。此变量将隐藏您在全局范围内声明的a
。
答案 1 :(得分:0)
variable declaration (var
keyword)在woot
函数范围内提升,使其成为局部变量(遮蔽全局变量a
)。它将初始化为undefined
,并返回该值,直到您分配给它。
答案 2 :(得分:0)
时间:
function woot(){
console.log(a);
.. a
还不存在!如果您想使用外部a
,则需要将其称为:
console.log( window.a );
删除你已经在功能中的a
,你现在可以使用console.log(a);
引用外部的console.log( window.a );
(因为你的功能中没有了)
否则,请使用alphas
区分两个{{1}}。