Javascript 简单英语中回拨功能的优点及实例?

Javascript 简单英语中回拨功能的优点及实例?,javascript,callback,Javascript,Callback,我在搜索回调函数,到目前为止我所了解的是回调函数是一个作为参数传递给另一个函数的函数 为什么要使用回拨功能?回拨功能的优点是什么?在stack overflow和其他网站上有很多答案,但没有一个能帮助我理解回调的真正优势。JavaScript只有一个执行线程 JavaScript不会抢占正在运行的线程 在调用堆栈清空之前,程序代码中的任何其他内容都不能运行。这被称为“运行到完成” 因此,程序中运行的任何东西都会阻塞其他所有东西(实际上是所有东西) 因此,如果你有任何东西是由CPU以外的任何东西绑

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


为什么要使用回拨功能?回拨功能的优点是什么?在stack overflow和其他网站上有很多答案,但没有一个能帮助我理解回调的真正优势。

JavaScript只有一个执行线程

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

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

因此,程序中运行的任何东西都会阻塞其他所有东西(实际上是所有东西)

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

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

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

您可以向这些异步函数提供回调来指定延续。i、 e.异步操作完成时,控制流应从何处开始

异步操作完成后,运行时会将“作业”放在运行时内部的“作业队列”上

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

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

然后,运行时开始从此堆栈帧执行

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

setTimeout(回调,2000);
document.write('酷,我可以在setTimeout等待时做一些事情');
函数回调(){
document.write('Hello from callback');

}
优势主要体现在异步函数中

  • 防止在脚本代码中进行不必要的检查。 例如,使用ajax获取响应:
    var xhttp=new-XMLHttpRequest();
    xhttp.onreadystatechange=函数(){
    //完成请求后要执行的操作。
    };
    xhttp.open(“GET”,url,true);
    xhttp.send()
    这样,您就不需要像使用
    setInterval(…)
    那样连续检查请求是否完成

  • 处理DOM事件。 所有DOM事件都需要通过回调来处理,因为您无法预测事件何时触发。
    例如:
    object.onclick=function(){//单击对象后要执行的操作}

  • 创建可扩展的api或插件。例如:
    var yourApi=函数(passInCallback){
    var-args;
    //做一些普通的事情。。。
    passInCallback(args);
    }

    然后api用户可以在执行公共函数后执行不同的行为


  • 这就是我目前所能想到的。

    异步操作。有关使用回调的基本示例,请参阅。您应该回答以下问题:“
    Promise
    s的优点是什么?”