寻求关于异步javascript的澄清

寻求关于异步javascript的澄清,javascript,asynchronous,callback,Javascript,Asynchronous,Callback,我是一名初级javascript程序员。我一直试图理解异步javascript,但我想澄清一些事情 我知道javascript在一个线程中运行,可以使用回调函数使代码异步,但我不知道是什么使回调函数异步 许多异步回调似乎遵循这样一种模式,即函数的参数是某个操作,然后是一个回调函数,该函数在该操作完成时执行: jQuery.get('page.html', function (data) { console.log("second"); }); console.log('first');

我是一名初级javascript程序员。我一直试图理解异步javascript,但我想澄清一些事情

我知道javascript在一个线程中运行,可以使用回调函数使代码异步,但我不知道是什么使回调函数异步

许多异步回调似乎遵循这样一种模式,即函数的参数是某个操作,然后是一个回调函数,该函数在该操作完成时执行:

jQuery.get('page.html', function (data) {
    console.log("second");
});
console.log('first');
具体是什么使此处参数中的回调在以后执行?这里的get方法是否预定义为某种特殊方法(因为它获取文件),如果将函数作为第二个参数传递,它将以异步方式运行

如何使自己编写的函数异步


谢谢

这可能是使异步代码异步的几个因素之一:

  • 计时器事件(即
    setTimeout()
    setInterval()
    ,它们都接受回调函数作为参数,并在以后执行)
  • DOM事件(即,将带有回调函数的事件侦听器附加到HTML元素或其他DOM节点,在这种情况下,在该事件触发时执行回调函数)
  • 浏览器提供的其他API(即
    XMLHTTPRequest
    ,它根据浏览器在引擎盖下本机执行的操作发出事件)
  • 在Node.js或类似的服务器端环境中,任何直接访问磁盘或网络等资源的I/O库
一般来说,
setTimeout()
setInterval()
是本机JS中异步执行的唯一工具(与特定运行时提供的DOM、浏览器或其他API相反)


在您的示例中,jQuery的.get()方法只是浏览器的
XMLHTTPRequest
API的包装器,它创建了一个新的XHR对象,该对象根据HTTP请求的状态发出事件,并通过回调将侦听器附加到这些事件上。

大多数异步API都是浏览器内置的,例如
XMLHTTPRequest
(网络I/O)或事件处理。因为它们是异步的,所以在实现与这些API交互的JavaScript API时必须牢记这一点
jQuery.get
jsxmlhttprequerst
的包装器,异步选项设置为true。所以它的行为是异步的。另一个关于