var name='200';
    function myFunc(){
     alert(name);//输出1
     var name=100;
     window.alert(name);//输出2
    }
    myFunc();
请问为什么输出1是undefined

解决方案 »

  1.   


    <SCRIPT LANGUAGE="JavaScript" type="text/javascript">
    //定义一个输出函数
    function outPut(s){
    document.writeln(s)
    }
    //全局变量
    var i=0;
    //定义外部函数
    function outer(){
    //访问全局变量
    outPut(i); // 0
    //定义一个类部函数
    function inner(){
    outPut(i); //undefiend
    var i=1;
    outPut(i); //1
    }
    inner();
    outPut(i); //0
    }
    outer();
    </SCRIPT>
      你可能认为输出结果是0 0 1 0,事实上在AS中确实是这样的,而在JS中的输入却是0 undefined 1 0,为何会这样了?刚才我们说到了JS函数体中声明的本地变量在整个函数中都有效,因此在上面代码中var i = 1 ;在inner函数中都有效,实际上显式声明的变量i是在预编译时就已经编译到调用对象中了,不同于隐式声明变量在解释时才被定义为全局变量,只是在调用outPut(i)时,还没有将它初始化变量,此时的本地变量i是未赋值变量,而不是未定义变量,因此输出了undefined。上面的代码等效于下面代码:function inner(){
    var i; //定义但不赋值
    outPut(i); //undefiend
    i=1;
    outPut(i); //1

      

  2.   

    你的代码相当于
        var name = '200';
        function myFunc() {
            var name;
            alert(name); //输出undefined
            name = 100;
            window.alert(name); //输出100
        }
        myFunc();看这个帖子,有讨论过http://topic.csdn.net/u/20120830/13/db72bec5-db6c-4c78-83ab-973f20bc2216.html
      

  3.   

    记住同一片作用域里面,相同的变量名指代的必然是同一个变量所以函数中两个alert访问的name变量当然是同一个变量,第一次访问时没有赋值,当然是undefined了
      

  4.   

    showbo说的很清楚了,补充一下,当javascript执行你的myFunc函数的时候,是有一个执行上下文的参与到函数执行的,这个执行上下文中包含了myFunc函数的形参,以及函数内参数的一些信息,所以你第一次alert的时候,javascript已经知道你这个myFunc函数有name 这个变量(但是还未赋值),所以undefined了!