You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
function wait(seconds){
var time = new Date()
while(new Date() - time < seconds * 1000){}
return
}
console.log(1)
wait(5);
console.log('慢死了')
console.log(2)
同步(Synchronous): 等待结果
异步(Asynchronous): 不等待结果
注意 : 异步常常伴随着回调一起出现, 但是异步不是回调,回调也不是异步
同步
异步: 现在与将来
使用像 JavaScript 这样的语言编程时,很重要但常常被误解的一点是,如何表达和控制持续一段时间的程序行为
它是指程序的一部分现在运行,而另一部分则在将来运行——现在和将来之间有段间隙,在这段间隙中,程序没有活跃执行。
实际上,所有重要的程序(特别是 JavaScript 程序)都需要通过这样或那样的方法来管理这段时间间隙,这时可能是在等待用户输入、从数据库或文件系统中请求数据、通过网络发送数据并等待响应,或者是在以固定时间间隔执行重复任务(比如动画)。
程序中现在运行的部分和将来运行的部分之间的关系就是异步编程的核心。
任何时候,只要把一段代码包装成一个函数,并指定它在响应某个事件(定时器、鼠标点 击、Ajax 响应等)时执行,你就是在代码中创建了一个将来执行的块,也由此在这个程序 中引入了异步机制
JS引擎
JS引擎:
js引擎可以说是js虚拟机,负责解析js代码的解析和执行。通常以下步骤:JavaScript
引擎本身所做的只不过是在需要的时候,在给定的任意时刻执行程序中的单个代码块。事件循环
JavaScript
引擎并不是独立运行的,它运行在宿主环境中,对多数开发者来说通常就是Web 浏览器。经过最近几年(不仅于此)的发展,JavaScript 已经超出了浏览器的范围,进入了其他环境,比如通过像Node.js
这样的工具进入服务器领域。实际上,JavaScript 现如今已经嵌入到了从机器人到电灯泡等各种各样的设备中。但是,所有这些环境都有一个共同“点”(thread,也指线程。不论真假与否,这都不算一个很精妙的异步笑话),即它们都提供了一种机制来处理程序中多个块的执行,且执行每块时调用 JavaScript 引擎,这种机制被称为
事件循环
。什么是事件循环?
有一个用 while 循环实现的持续运行的循环,循环的每一轮称为一个 tick。对每个 tick 而言,如果在队列中有等待事件,那么就会从队列中摘下一个事件并执行。这些事件就是你的回调函数。
一些异步代码
回调
Promise
The text was updated successfully, but these errors were encountered: