当 JavaScript 代码调用异步函数时,它就是异步的。
那么,是什么让函数成为异步的呢?
当 JavaScript 函数调用异步函数时,它就是异步的:
function myAsyncFunction (callback) {
setTimeout(function(){callback()}, 100);
}
那么,如何setTimeout
or element.onchange
得到实施吗?
它们是用 C 实现的。
对于通用后台处理,setTimeout
and setInterval
是 javascript 为您提供的事件循环的最低级别接口。因此,要在纯 JavaScript 中实现您自己的异步函数,您需要使用setTimeout
.
例如,如果我们采用您的原始代码,我们可以通过简单地执行以下操作使其异步:
var a = function(str,callback) {
setTimeout(function() {
console.log('This should be first: ' + str + '.')
},1000);
setTimeout(callback,1001);
}
对于需要以其他方式处理的功能,例如运行另一个线程或读取文件或查询数据库,您无法使用纯 JavaScript 来完成。您需要用 C 语言修改浏览器代码。不同的浏览器有不同的方式让您通过插件“正式”完成此操作(Flash 和 Java 就是这样实现的)。有些浏览器根本不允许您执行此操作。
Node.js 允许您使用 Addon API 用 C 语言编写模块:http://nodejs.org/api/addons.html http://nodejs.org/api/addons.html。从那里开始,如何使代码异步取决于你 - 线程,select,epoll 等。但是你负责与 javascript 事件循环交互(最有可能使用 select/poll/epoll 实现,所以你不需要创建您自己的)。