var i=10;
function a() {
    alert(i);
    var i = 2;
    alert(i);
};
a(); 为什么第一个alert(i)输出的值是undefined?还有词法作用域,不是很理解

解决方案 »

  1.   

    明白是怎么回事了,函数在执行的时候,发现当前作用于内有这个变量,但是没有初始化值,所以会输出undefined
      

  2.   

    var i=10;
    function a() {
      alert(i);  //1
      var i = 2; //2
      alert(i);  //3
    };
    a();
     1、为什么第一个alert(i)输出的值是undefined?
    答:因为在function a(){}内部有var str的声明, var的声明是在整个函数可见的,也就是说在执行1时,程序已经知道了在a()内部有str被声明了,但是还没有给赋值所以alert的结果就是undefined。2、什么是词法作用域?
    答:所谓词法作用域是说,其作用域为在定义时(词法分析时)就确定下来的,而并非在执行时确定。白话就是在函数未执行前,函数执行的顺序已经被确定,而不是类似JAVA一样,是在执行前根本不知道执行顺序。希望对你有帮助!!