首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >回调函数在通俗易懂的英语中的优点?

回调函数在通俗易懂的英语中的优点?
EN

Stack Overflow用户
提问于 2016-07-13 00:16:26
回答 2查看 298关注 0票数 1

我在搜索回调函数,到目前为止,我所理解的回调函数是一个函数,它作为参数传递给另一个函数。

为什么要使用回调函数?回调函数的优点是什么?在stack overflow和其他网站上有很多答案,但它们都不能帮助我理解回调的真正优势。

EN

回答 2

Stack Overflow用户

发布于 2016-07-13 01:04:43

其优势主要体现在异步函数上。

  1. 可防止对脚本代码进行不必要的检查。例如,使用ajax获取response:var xhttp = new XMLHttpRequest(); xhttp.onreadystatechange = function() { // things you want to perform after request is done. }; xhttp.open("GET", url, true); xhttp.send();

这样,您就不需要像使用setInterval(...).

  • Handling DOM事件那样不断地检查请求是否完成了。所有的DOM事件都需要通过回调来处理,因为您无法预测事件何时会被触发。

例如:

object.onclick=function(){// things you want to perform after the object is clicked};

  • Create一个可扩展的应用程序接口或插件。例如:

var yourApi = function(passInCallback){ var args; //do some common things... passInCallback(args); }

然后,您的应用编程接口用户可以在执行常见函数后执行不同的行为。

这就是我目前能想到的全部。

票数 2
EN

Stack Overflow用户

发布于 2016-07-13 00:25:53

JavaScript只有一个执行线程。

JavaScript不会抢占正在运行的线程。

在清空调用堆栈之前,程序代码中的任何其他内容都不能运行。这就是所谓的“运行到完成”。

因此,在您的程序中运行的任何东西都会阻塞其他所有东西(字面上是所有东西)。

因此,如果您有任何东西是由CPU以外的任何东西绑定的(比如网络请求,或等待用户),那么它在CPU方面是非常浪费的,因为执行线程会被简单地等待发生的事情阻塞。因此CPU处于空闲状态。

因此,JavaScript运行时提供了避免这种情况的机制。它使以等待(如网络请求)为特征的功能成为异步的。

这意味着执行的JavaScript线程可以继续,而运行时将等待您的执行。

您可以提供对这些异步函数的回调来指定延续。即,当异步操作完成时,控制流应该从何处拾取。

当异步操作完成时,运行库将"Job“放在运行库内部的"Job Queue”上。

这些作业封装了函数指针(回调)和调用回调时使用的参数。

当调用堆栈下一次为空并且队列中的其他作业已经完成时,则从作业队列中移除该作业,并实例化(“执行上下文”)堆栈帧并将其放置在堆栈上。

然后运行库开始从此堆栈帧执行。

有时,这种行为被包装在promise API中,以使其更加方便,但机制是相同的。

代码语言:javascript
运行
复制
setTimeout(callback, 2000);
document.write('Cool, I can do some stuff while the setTimeout is waiting.');

function callback() {
  document.write('Hello from the callback.');
}

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38334165

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档