2017-02-17 34 views
2

寻求澄清我是一个开始的JavaScript程序员。我一直在尝试了解异步JavaScript,但我想澄清一些事情。约异步JavaScript

我明白,JavaScript运行在一个单一的线程,你可以使用回调函数使你的代码异步,但我很困惑什么使回调函数异步或不。

很多异步回调似乎遵循其中一个功能作为它的参数有一定的动作,然后一个回调函数,这是当该操作完成后执行模式:

jQuery.get('page.html', function (data) { 
    console.log("second"); 
}); 
console.log('first'); 

这是什么特别是使参数的回调在以后执行?难道这里的get方法是预先定义为某种特殊方法的(因为它取一个文件),如果你将一个函数作为第二个参数,它在一个异步的方式表现?

如何制作你自己写的异步函数?

感谢

+2

大多数异步API是浏览器内置的,例如XMLHTTPRequest(网络I/O)或事件处理。因为它们是异步的,所以与这些API进行交互的JavaScript API必须考虑到这一点。 –

+0

看看[这](http://stackoverflow.com/questions/13671798/is-get-of-jquery-asynchronous)。 'jQuery.get'是“JS XMLHttpRequerst”的一个包装,异步选项设置为true。所以它表现为异步。 – NDFA

+1

上[JS,异步或不?另一大解释(http://stackoverflow.com/questions/13806695/what-is-a-simple-example-of-an-asynchronous-javascript-function#answer-13806828 ) – NDFA

回答

1

这可能是几件事情之一,使异步代码异步:

  • 定时器事件(即setTimeout()setInterval(),每个接受回调函数作为参数,他们在稍后的时间执行)
  • DOM Events(即将具有回调函数的事件侦听器附加到HTML元素或其他DOM节点,在这种情况下,您的回调函数在该事件触发时执行)
  • 浏览器提供的其他API(即XMLHTTPRequest,其发射基于事
  • 在Node.js的或类似的服务器端环境中的事件的浏览器本身不引擎盖下),直接访问的资源,如磁盘或网络

通常,任何I/O库讲,setTimeout()setInterval()是用于天然JS异步执行(相对于DOM中,浏览器,或其他API由特定运行时提供)

在您的例子的情况下,jQuery的获得()方法的唯一车辆仅仅是浏览器的XMLHTTPRequest API的一个包装,它创建一个新的XHR对象th然后根据HTTP请求的状态发出事件,并将侦听器与回调关联到这些事件。