我只是在显示警报的值,但我得到a
未定义为什么?我将解释这个问题:
首先我使用false
参数调用函数,它会显示a = 1;
的警报。但是,当我将true
作为参数传递时,它会首先显示警告2
(正如预期的那样是本地的),但是再次显示2
?第三,它说a是undefined
?
function ab(p){
a = 1;
if(p){
var a = 2
alert(a)
}
alert(a)
}
ab(false);
alert(a);
ab(true)
时的意外结果?
答案 0 :(得分:4)
这就是所谓的变量提升。实际上,您正在考虑作为全局变量的变量将在该函数内部被提升,并且它将变为本地变量。
编译器会考虑你的代码,
function ab(p){
var a; //will be hoisted here.
a=1;
if(p){
a=2;
alert(a);
}
alert(a);
}
答案 1 :(得分:2)
这不是全球性的。你已经在if条件中定义了变量。它的背景将保留在内部,如果只是。使用:
function ab(p){
a=1;
if(p){
a=2
alert(a)
}
alert(a)
}
ab(false);
alert(a);
<强> Working Demo 强>
答案 2 :(得分:1)
您在函数中使用了var
,因此JavaScript会在下面看到您的代码(无论您使用var
,在if
内还是在循环中......) :
function ab(p) {
var a=1;
if (p) {
a=2;
alert(a);
}
alert(a);
}
ab(false);
alert(a);