<html>
<body>
<script type="text/javascript">   function a(){
     alert("a1");
    }
    a();    function a(){
      alert("a2");
     }
    a();
</script></body></html>

解决方案 »

  1.   

    函数重复定义,,如果这还不报错,I 服了 javascript
      

  2.   

    先不管能不能再body中写js
    第二个function a()会不会覆盖第一个function a()
    ???
    难道和java的重写一个原理?
      

  3.   


    <html>
    <body>
    <script type="text/javascript">   var a= function (){
         alert("a1");
        }
        a();   var a=  function (){
          alert("a2");
         }
        a();
    </script></body></html>
    做了一个小小的改动,这样对比就明显了
      

  4.   

     function a(){
         alert("a1");
        }
        a();    var a = function(){
          alert("a2");
         }
        a();
    改下面的就可以 
      

  5.   

    a2,a2前面的function 被后面的覆盖掉
      

  6.   


    函数执行的时候,是在global 作用域里的。执行到a函数的时候,只找最后定义的那个来执行
      

  7.   

    这个道理就像
    var a = 123;
    function f() {
      alert(a);//在f函数的作用域,找a,如果找不到,才到f函数外面找
      var a = 1;
      alert(a);
    }
    f();
    猜测输出什么
      

  8.   

    http://topic.csdn.net/u/20110610/18/869d5358-0ea9-4701-87c9-c5cc3947094c.html
      

  9.   

    +1
    js先执行function的定义,再执行js代码
      

  10.   

    <html>
      <body>
        <script type="text/javascript">      
            var a = 123;
            function f() {
              alert(a);     //这个怎么变成undefine??为什么不去自动寻找外边的 a????
              var a = 1;
              alert(a);
             }
            f();
        </script>
      </body>
    </html>
      

  11.   


    里面有了,所以没去外面找啊,但是里面虽然有了,却是在第一个alert 底下才定义的,所以输出undefine啦..
      

  12.   

    归根结底是作用域的问题 楼主不要再单纯的以 顺序执行 的眼光去看它,多找点相关资料看看吧
    http://www.cnblogs.com/kym/archive/2010/01/06/1640043.html
      

  13.   

    这个还是比较容易的吧,了解js的作用域和运行顺序就很简单了,典型的例子:
    代码:var a = 1;
    d();
    e();
    var b = 2;
    var c = 3;
    function d(){
        alert(a);
        var a = 0;
        alert(a);
    }
    function e(){
        alert(b);
    }
      

  14.   

    执行顺序:var a;
    var b;
    var c;
    function d(){};
    function e(){};
    a=1;
    d();
        var a;
        alert(a);//undefined,如果没有d函数中的var a=0,这个地方就是1
        a = 0;
        alert(a);//0
    e();
        alert(b);//undefined,js会从e域往上层域找,直到window为止,只要其中任何一个域中有b的定义,就会作为参数传递给alert,哪怕是undefined
    a=1;
    b=2;
    c=3;
      

  15.   

    a2 和a2 javascript是逐行走的。
      

  16.   

    "a2", "a2"
    函数定义先于其它的代码,后面的函数a会取代前面的已定义的。
      

  17.   

    答错了,不过答案很简单就能想明白,看看下面的例子就明白了<script type="text/javascript">
    a();//这里依然能够调到a方法
    function a(){
    alert(1);
    }
    </script>由此你应该明白为什么了吧
      

  18.   

    这个不是谈了几次了么 = =

     function优先
      

  19.   

    var a =  function (){
        alert("a1");
    }
    a();var a = function (){
        alert("a2");
    }
    a();
      

  20.   

    var 和 function 都是预编译的,那么谁更先编译呢??
      

  21.   

    <html>
    <Script>
    a();
    a = function(){alert("去shi!");}
    a();
    function a(){alert("sb1");}
    a();
    function a(){alert("sb2");}
    a();
    </script>
    </html>
    我执行这个,为什么是"sb2",然后3个"去shi!",不是应该"去shi!",然后三个"sb2"吗?我的理解是这样的,js引擎先扫描编译一下js代码,第一句是赋值a方法,后面两函数因为相同,则认为最后一个有效。请指出我哪里理解错了,谢谢
      

  22.   

    chrome 测试,
    a1 
    a2
      

  23.   

    肯定是 a2 a2。w3c的标准啊第二个函数覆盖了第一个函数。
    变量和函数的定义是全局的。
      

  24.   

    后面会覆盖前面,所以前面的 function a(){}可以不看
      

  25.   

    a2,a2。
    这涉及到JavaScript的语法本身,
    在Javascript中函数也是一种对象,因此
    定义函数有两种形式:1,定义式,function foo(){}
    2,声明式,var foo = function(){}
    在执行时,对于声明式来说按正常的语句顺序执行。
    但对于定义式来说,JS引擎会提出出来,预先处理,因此,重复定义函数,后面的会覆盖前面的。参见 李战的《javascript真经》,哈哈。
      

  26.   

    为了防止在定义前调用函数时出现对象未定义的现象,JS引擎把JS程序分为了两个部分,定义部分和执行部分,先顺序运行定义部分,然后再顺序运行执行部分,所有类似function funcName(){}的定义格式是定义部分,会在执行funcName()前定义,而funcName = function(){}为赋值语句,是执行部分,所以下面两段运行的结果是不一样的,LZ的写法相当于第一种情况,先定义a,再覆盖定义一次,再执行两个a()
    //正常
    a();
    a();
    function a(){
        alert("a1");
    }
    function a(){
        alert("a2");
    }//报错,缺少对象
    a();
    a();
    a = function(){
        alert("a1");
    }
    a = function(){
        alert("a2");
    }
      

  27.   


    <html>
    <body>
    <script type="text/javascript">
       a();
       function a(){
         alert("a1");
        }
        a();    function a(){
          alert("a2");
         }
        a();
    </script></body></html>
    还是三个a2
      

  28.   

    错错错!!!
    在词法分析结束后,构造作用域链的时候,会将函数内定义的var变量放入该链,因此a在整个函数f()内都是可见的(从函数体的第一行到最后一行),
      

  29.   

    js会将方法提到上部,所有第二个方法覆盖第一个,实际js方法也可以赋值给变量造成的
      

  30.   

    两次a2
    因为js执行,会先便利一遍所有的function,第二个把第一个给覆盖了,所以两次a2
      

  31.   

    the function declaration and function expression have been referred to as being
    almost equivalent. This hedging is due to one major difference in the way that an interpreter loads data
    into the execution context. Function declarations are read and available in an execution context before
    any code is executed, whereas function expressions aren ’ t complete until the execution reaches that line
    of code
      

  32.   

    总之还是先加载functtion,后运行js
      

  33.   

    var a = function() {}

    function a() {}
    的唯一区别就是后者会在其作用域中预先定义a();
    function a() {};
    正常运行a();
    var a = function() {};
    报错:变量未定义
      

  34.   

    IE6,FF4,Chrome:
    a2
    a2JS无函数重载机制,作用域和预解析是另一个话题