Javascript 回调函数与仅调用函数

标签 javascript callback

所以我不太明白“回调”的意义。

这是回调的示例:

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");

最佳答案

Whats the point of passing in a function when you can just call the function?

通常,回调 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 是严格单线程的,因此编写等待函数的唯一方法是暂停页面中任何脚本的执行 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 

关于Javascript 回调函数与仅调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25195327/

相关文章:

javascript - 为什么我不能以同样的方式将 function() 绑定(bind)到 onload 事件和 resize 事件?

javascript - Cannot POST/test.php 当我试图将数据输入数据库时​​它给了我这个错误

android - 虚拟回调接口(interface)

jquery - 重置 jQuery 函数?

Android - MediaRecorder 的回调开始录制

javascript - 如何在两个 div 之间切换并在保存/刷新页面后保留在所选 div 上?

javascript - 尝试将 onclick() 函数附加到按钮时有哪些解决问题的技巧?

javascript - 格式化 JSON 数据并将其附加到 html div

javascript - `this.some_property` 在匿名回调函数中变为未定义

c# - 从 C# 到 C++ 的回调函数