var i=1;
function num1()
{
   alert(i);
   var i=2;
   alert(i);
}
num1();
这个代码中
第一个alert(i)值是多少
第二个是多少?大家凭自己的思想作答,敲进去就没意思了,呵呵!

解决方案 »

  1.   

    第一个不会是1, 因为在进入num1是, 解析器会先抓var变量, 开辟内存空间但不赋值, 直到解析到赋值语句. 在第一个alert时, 会判断现在要的i是存在与函数体里的, 并不是全局的i, 而根据这个i索引到的是未赋值的i. 第二个明显的2
      

  2.   

    果然~~  
    undefined, 2. 
      

  3.   

    我的理解:这个跟作用域有关,进入函数num1()后首先会检索局部变量,执行到alert(i)时,发现在函数体内此语句前并没有定义变量i,由于js中的变量在使用前可定义也可不定义,所以,此句不会出错,在此时定义了变量i,但i还没有赋值,所以,第一个alert结果为undefined。紧接着给i赋值为2,所以第二个alert结果为2。
      

  4.   

    请问是不是系统会先扫描下num1函数里的局部变量,
    若有与全局变量同名的变量i的使用,再看有没有局部变量
    i的定义,若有则认为前面遇到的变量i是局部的,否则认为
    是全局的:例子
    var i=1;
    function num1()
    {
      alert(i);
      i=2;
      alert(i);
    }
    num1();