所以我真的不明白"回调"。
以下是回调示例:
function sayBye(){
alert("Bye!");
}
function saySeeYou(){
alert("See you!");
}
function sayHello(name,myfunc){
alert("Hello");
myfunc;
}
sayHello("Max",saySeeYou());
当你可以调用函数时,传递函数是什么意思?像这样的代码完全相同:
function sayBye(){
alert("Bye!");
}
function saySeeYou(){
alert("See you!");
}
function sayHello(name){
alert("Hello");
saySeeYou();
}
sayHello("Max");
答案 0 :(得分:2)
当你可以调用函数时,传递函数是什么意思?
通常,回调Javascript在Javascript中用于您希望将来运行的代码。最简单的例子是setTimeout:如果你现在调用回调,那么代码会立即运行而不是500毫秒之后。
//prints with a delay
console.log("Hello");
setTimeout(function(){
console.log("Bye");
}, 500);
//no delay this time
console.log("Hello");
console.log("Bye");
当然,如果我们可以按照
的方式写一些内容,那将会非常巧妙//fake Javascript:
console.log("Hello");
wait(500);
console.log("Bye");
但遗憾的是,Javascript并没有让你这样做。 Javascript是严格单线程的,因此编写wait函数的唯一方法是暂停页面中任何脚本的执行500毫秒,这将“冻结”处于无响应状态的事物。因此,需要很长时间才能完成的操作(如超时或AJAX请求)通常会在完成后使用回调来发出信号,而不是阻止执行,然后在完成时返回。
顺便说一下,当传递回调时,你应该只传递函数名。如果添加括号,则调用函数并传递其返回值:
//When you write
foo(10, mycallback());
//You are actually doing
var res = mycallback();
foo(10, res);
//which will run things in the wrong order
答案 1 :(得分:0)
你的代码不正确,正如Felix Kling已经指出的那样。除此之外,传递函数而不是直接调用函数允许您插入不同的行为,您的代码更加分离和灵活。这是一个例子:
function sayBye(){
alert("Bye!");
}
function saySeeYou(){
alert("See you!");
}
function sayHello(name,myfunc){
alert("Hello");
if (myfunc) {
myfunc();
}
}
sayHello("Max",saySeeYou);
// I'm inserting a different behavior. Now instead of displayng "See you!"
// will show "Bye!".
sayHello("Max",sayBye);
答案 2 :(得分:0)
你做错了,你应该像下面那样做
不要调用该函数只是将函数作为回调传递
使用此
sayHello("Max",saySeeYou); //here the second parameter is function
而不是
sayHello("Max",saySeeYou());//This will put the result of saySeeYou as second parameter
in hello call the functiom
function sayHello(name,myfunc){
console.log("Hello");
myfunc();
}