我是一名初级 JavaScript 程序员。我一直在尝试理解异步 javascript,但我想弄清楚一些事情。
我知道 javascript 在单线程中运行,您可以使用回调函数使您的代码异步,但我对什么使回调函数异步与否感到困惑。
很多异步回调似乎都遵循这样一种模式,即一个函数的参数是一个特定的 Action ,然后是一个在该 Action 完成时执行的回调函数:
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 请求,并将带有回调的监听器附加到这些事件。
关于javascript - 寻求有关异步javascript的澄清,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42308234/