setTimeout小尴尬的启示
本文通过分析一个小案例帮大家从一个侧面理解JavaScript的异步执行机制,从而可以在实践中避免类似的尴尬。
小背景
我们都知道,alert
这种内置弹框会阻塞后续代码执行:
之所以如此,就是因为JavaScript代码在浏览器中是单线程执行的。换句话说,浏览器中只有一个主线程负责运行所有JavaScript代码(不考虑Web Worker)。
提到浏览器中的JavaScript,基本上只有三个来源:
- BOM API的代码,让我们可以操作并利用浏览器提供的能力
- DOM API的代码,让我们可以操作网页内容
- 我们自己写的ECMAScript代码
这没什么。我们也知道,setTimeout
用于“定时”执行代码,比如这样可以定时在3秒钟之后执行一段代码(函数):
setTimeout(delayCode, 3000)