为什么变量是未定义的,因为我在全球声明?

时间:2014-09-06 07:30:31

标签: javascript jquery

我只是在显示警报的值,但我得到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)时的意外结果?

3 个答案:

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