这里有两段代码:
第一段:
      <script>
function firstFun()
{
alert("1");
}function secondFun(func)
{
alert("2");
func();
}secondFun(firstFun);
</script>第二段:
        <script>
function firstFun()
{
alert("1");
}function secondFun(func)
{
alert("2");
func;
}secondFun(firstFun());
</script>请教:
为什么第一段代码的警告框先输出2,再输出1?而第二段则相反呢?

解决方案 »

  1.   

    firstFun是函数句柄, firstFun()是函数调用。
    secondFun(firstFun()); 是把 firstFun() 调用的返回值作为参数,显然要先调用才行。
    secondFun(firstFun); 是把函数句柄作为参数,并传实参时不执行firstFun, 而是通过func()来调用。 
      

  2.   

     引用和调用的关系  一个函数  名如ss
    如果是ss()就是调用  也就是运行该函数
    如果是ss没括号,就是引用该函数 而并不运行,只是把它赋给另外一个变量之类的 比如
    var a=ss
    那么之后你就可以通过
    a()来运行ss()了
    第一段先运行secondfunction
    重上到下运行是
    先运行firstfunction  输出1  之后alert(2)
    第二段secondFun(firstFun()) 时其实是先运行firstfunction 之后把运行返回的值传入secondfunction
    所以先输出1  之后输出2
      

  3.   

    晕 第一段写反了 
    第一段先运行secondfunction
    重上到下运行是
    先alert(2)
    之后运行firstfunction 输出1
      

  4.   

    函数名:传递函数指针
    函数名() : 是调用函数!!
    楼主第2段代码,明显的错误。
    function secondFun(func)
    {
    alert("2");
    func;
    }secondFun(firstFun());secondFun(firstFun()); 把firstFun()的返回值作为secondFun的参数firstFun 没有返回值。所以
    function secondFun(func)
    {
    alert("2");
    func;
    }
    这个 func 始终是 undefined
      

  5.   

    secondFun(firstFun())
    firstFun()没有return额,只是提示一个警告框,能带入secondFun函数作为参数吗?
    这样的话是不是类似于先调用firstFun(),在调用secondFun(),效果一样?
      

  6.   

    谢谢。我看到书上写secondFun(firstFun)中firstFun是作为函数的指针是么?和句柄是一个概念?
      

  7.   

    谢谢纠错。我起初也在想这样定义有用没有。
    如果firstFun函数有返回值,那么这个就有定义了是吗?