JavaScript 异步编程
JavaScript 异步编程
异步的概念
异步(Asynchronous, async)是与同步(Synchronous, sync)相对的概念。
在学习的传统单线程编程中,程序的运行是同步的(同步不意味着所有步骤同时运行,而是指步骤在一个控制流序列中按顺序执行)。
而异步的概念则是不保证同步的概念,也就是说,一个异步过程的执行将不再与原有的序列有顺序关系。
简单来理解就是:同步按代码顺序执行,异步不按照代码顺序执行,异步的执行效率更高。
通俗地解释异步:异步就是从主线程发射一个子线程来完成任务。
什么时候用异步编程
为了避免整个网页将失去响应这种情况的发生,常常用子线程来完成一些可能消耗时间足够长以至于被用户察觉的事情,比如读取一个大文件或者发出一个网络请求。
因为子线程独立于主线程,所以即使出现阻塞也不会影响主线程的运行。
但是子线程有一个局限:一旦发射了以后就会与主线程失去同步,而无法确定它的结束,如果结束之后需要处理一些事情,比如处理来自服务器的信息,无法将它合并到主线程中去的。
为了解决这个问题,JavaScript 中的异步操作函数往往通过回调函数来实现异步任务的结果处理。
回调函数
回调函数就是一个函数,它是在启动一个异步任务的时候就告诉它:当它完成了这个任务之后要干什么。
setTimeout 就是一个消耗时间较长(3 秒)的过程,它的第一个参数是个回调函数,第二个参数是毫秒数,这个函数执行之后会产生一个子线程,子线程会等待 3 秒,然后执行回调函数,在命令行输出执行结果。

浙公网安备 33010602011771号