<script>
function A()
{
    alert(1);
}
A();
function A()
{
    alert(2);
}
A();
function A()
{
    alert(3);

A();
</script>为啥输出2,2,3?求教,最好能详细点

解决方案 »

  1.   

    发错了,不好意思,应该是<script>
    //alert(/^\.$/.test('6.9'))
    function A()
    {
        alert(1);
    }
    A();
    function A()
    {
        alert(2);
    }
    A();
    A=function()
    {
        alert(3);

    A();
    </script>
    为什么输出2,2,3
      

  2.   

    function A(){
    }
    这种行事的是先编译的吧,我估计
      

  3.   


    <script>
    //alert(/^\.$/.test('6.9'))
    function A()
    {
        alert(1);
    }
    A();
    function A()
    {
        alert(2);
    }
    A();
    A=function()
    {
        alert(3);

    A();
    </script>
    第一个A();会查找 function A() 这种形式的函数也就是 function 后直接跟函数名的会找到
    function A()
    {
        alert(1);
    }

    function A()
    {
        alert(2);
    }
    因为
    function A()
    {
        alert(2);
    }
    是后定义的,所以
    function A()
    {
        alert(1);
    }被覆盖,执行的是
    function A()
    {
        alert(2);
    }第二个A(); 也是同样第三个A() 是3 是因为在查找function 后直接跟函数名的 之后,发现 A=function()被重新赋值了所以会执行
    function()
    {
        alert(3);