<script>
var arg = 1;
function funcTest() {
    alert(arg);
    var arg = 2;
}
arg = 10;
funcTest();
</script>

解决方案 »

  1.   

    弹出undefined,因为Javascript编译funcTest()方法时,发现后面还有声明 var arg = 2;时 ,会认为这个变量还为初始化,所以弹出undefined,你可以去掉 var arg = 2; 这一句,或者将这句前面的var去掉也可以弹出10
      

  2.   

    在函数声明过程中,它会遍历该函数内部所有声明。遇到var arg认为arg为该函数内部元素。但alert时,该声明还未执行,所以就undefined了
      

  3.   

    Javascript解析有一个预编译的过程,预编译的时候检测到方法内部定义了变量arg,所以应用指向了方法内容的arg,执行的时候逐行解析还没解析到为变量赋值行所以弹出的是undefined。可以搜索下 Javascript 变量作用域,网上有很多文章有详细的说明。
      

  4.   

    Javascript 变量作用域的问题