日期:2014-05-16  浏览次数:20351 次

javascript函数传入函数的参数
这里有两段代码:
第一段:
  <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?而第二段则相反呢?

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

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


楼主第2段代码,明显的错误。


function secondFun(func)
{
alert("2");
func;
}

secondFun(firstFun());

secondFun(firstFun()); 把firstFun()的返回值作为secondFun的参数

firstFun 没有返回值。

所以
function secondFun(func)
{
alert("2");
func;
}
这个 func 始终是 undefined