“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") );
答案 0 :(得分:8)
您没有将函数作为第三个参数传递,您正在调用该函数并传递其返回的值。它应该是:
test1(123, "Hello!", function() { test2("Look"); });
除了得到错误的输出顺序之外,当您尝试调用fn()
时也应该收到错误,因为fn
未定义。
答案 1 :(得分:5)
当您致电test1(123, "Hello!", test2("Look") );
时,这就是发生的事情:
test2("Look")
test1
:test1(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"); });