1 function myFunction() 
2 { 
3   alert("Old");
4 }
alert(myFunction);
5 myFunction(); // 输出 "Old"
6 myFunction=function()
7 {
8   alert("New");
9 };
alert(myFunction);
10 myFunction();myFunction 只是指向某个函数体的一个指针,在第 6 句定义的时候把这个变量重新指向了一个新的函数定义体

解决方案 »

  1.   

    您好,还是这个<script>
    function myFunction() //第二行

    alert("Old");
    }
    var savedFuncion=myFunction;
    myFunction=function() //第七行
    {
    alert("New");
    };
    myFunction(); // 输出 "New"
    savedFuncion(); // 输出 "Old"
    </script>还是这个myFunction() 的意思不是调用第2行名为 myFunction的函数吗?不是应该输出“old”吗?为什么是new呢?您说 第七行的 myFunction 是个指针,这个意思我可以理解成 myFunction 是个变量吗?指向function()如果可以这么理解,我不明白您这么回复和我的提问有什么关系呢?对不起,我没能理解,您能耐着性子解释下吗?
      

  2.   

    <script>
    function myFunction() //第二行

    alert("Old");
    }
    alert("myFunction:\n"+ myFunction); //看看这个变量的内容是什么
    var savedFuncion=myFunction;
    alert("saveFunction:\n"+ saveFunction) //看看这个赋值以后新的变量里存放着什么内容
    myFunction=function() //第七行 //这句代码很清晰呀,就是给 myFunction 变量赋一个新内容
    {
    alert("New");
    };
    myFunction(); // 输出 "New"  //由于赋了新内容当然就是新的结果
    savedFuncion(); // 输出 "Old" // saveFunction 变量里存的还是老的函数体。当然执行的还是老的结果喽。
    </script>
      

  3.   

    晕,没注意到你的新变量名字!<script>
    function myFunction() //第二行

    alert("Old");
    }
    alert("myFunction:\n"+ myFunction); //看看这个变量的内容是什么
    var savedFunction=myFunction;
    alert("saveFunction:\n"+ savedFunction) //看看这个赋值以后新的变量里存放着什么内容
    myFunction=function() //第七行 //这句代码很清晰呀,就是给 myFunction 变量赋一个新内容
    {
    alert("New");
    };
    myFunction(); // 输出 "New"  //由于赋了新内容当然就是新的结果
    savedFunction(); // 输出 "Old" // saveFunction 变量里存的还是老的函数体。当然执行的还是老的结果喽。
    </script>
      

  4.   

    不要去理解运行的顺序!
    function myFunction()

      alert("Old");
    }
    有这样的函数定义之后,
    myFunction 和 myFunction() 这两个是不一样的概念,虽然只是添加了一个括号,但第一个是表示 myFunction 这个变量,而后一个则是执行函数型变量 myFunction 所指的函数体。
      

  5.   

    误导呀,JS里没有指针的概念。如果你用指针的概念来理解这段程序的话,肯定觉得结果是不对的。
    举一个例子:
    <script>
    //定义myFunction函数。
    function myFunction()
    {
        alert("Old");
        return "New";
    }//也可以这样定义,跟上面定义的完全全一样。
    var myFunction = function()
    {
        alert("Old");
        return "New";
    }//从第二个定义可以很好的理解,说明myFunction是个变量,第一个也好说明,myFunction()是个函数。说白了,在JS里所有的函数都可以这样理解:不加括号就是一个变量,是函数体;不加括号就是执行函数。//执行这样的测试就更清楚了。//执行函数本身
    myFunction();//将函数体输出出来。
    alert(myFunction);//首先执行函数体,再将函数返回的结果输出出来。
    alert(myFunction());
    </script>
    我们再来看看你提的问题
    //定义myFunction函数
    function myFunction() 

      alert("Old");
    }
    //定义变量savedFunciton,同时把myFunction函数体的内容复制给savedFunciton,注意跟C++里函数指针的区别。
    var savedFuncion=myFunction;//失明新定义myFunction的内容,跟savedFunction一点关系都没有了。
    myFunction=function()
    {
      alert("New");
    };//执行新的myFunction定义,输出"New"
    myFunction();    // 输出 "New"//执行保存的savedFunction。所以输入"Old"
    savedFuncion();  // 输出 "Old"
      

  6.   

    原来meizz是版主啊......谢谢两位的耐心回复
      

  7.   

    给meizz四个信息,都回了。很热心啊myFunction();alert(myFunction());有什么不同吗?为什么返回结果也弹出来了啊?