为什么Javascript加载到函数“函数作为参数”之前比变量?

时间:2014-08-05 08:44:44

标签: javascript function parameter-passing

“fn”console.log在两个变量的console.log之前出现。

我的功能是:

function test1(var1, var2, fn){ 
   console.log(var1, var2);
   fn();
}

function test2(var3){
   console.log(var3 + " it's here");
}

呼叫:

test1(123, "Hello!", test2("Look") );

3 个答案:

答案 0 :(得分:8)

您没有将函数作为第三个参数传递,您正在调用该函数并传递其返回的值。它应该是:

test1(123, "Hello!", function() { test2("Look"); });

除了得到错误的输出顺序之外,当您尝试调用fn()时也应该收到错误,因为fn未定义。

答案 1 :(得分:5)

当您致电test1(123, "Hello!", test2("Look") );时,这就是发生的事情:

  • 执行test2("Look")
  • 将该函数调用的返回值传递给test1test1(123, "Hello!", undefined);

基本上,test2在调用test1之前执行,因为您将函数的返回值作为参数传递。

要实际传递函数本身,执行"稍后",您需要将其包装在匿名函数中:

test1(123, "Hello!", function() { test2("Look"); });

答案 2 :(得分:0)

代码应如下所示:

(function(){
function test1(var1, var2, fn){ 
   console.log(var1, var2);
   fn("Look");
}

function test2(var3){
   console.log(var3 + " its here");
}

test1(123, "Hello!", test2);
})();
顺便说一下BTW“它就在这里” - '(单引号)获得更多的权力然后“(双引号)。看起来应该是'它在这里'或”它在这里“。

如果你想调用传递函数,它应该看起来像@Cerbrus和@Barmar说:

test1(123, "Hello!", function() { test2("Look"); });