在web workers
它们自己的野兽之外,将 HTML 网页和相关的 Javascript 视为单线程。 [1]
因此,如果页面上正在运行任何javascript,则整个用户界面都会被阻止。之类的东西window.alert()
,window.confirm()
并window.prompt()
阻止整个 UI 直到它们被清除,但即使是无限循环也会冻结浏览器窗口 [2] 直到它完成。
编辑 - 基于评论和编辑问题:
原始问题中提供的链接不是指运行 JavaScript 的执行,而是指 JavaScript 加载的同步与异步性质。我将举一个例子说明为什么会发生这种阻塞。
在过去的 Javascript 时代,该函数document.write()
是让 Javascript 与网页交互的唯一方法。因此,当网页遇到加载 Javascript 文件的请求时,浏览器必须暂停其他所有内容——以防 Javascript 文件用于document.write
向流中注入某些内容。
在当今世界,这种情况发生得并不多,因此浏览器为页面设计者提供了一种方式来表达‘我保证这个 Javascript 文件并不关心它何时加载,它不会使用document.write()
或任何其他棘手的事情。在完成之前,您不必冻结。
这就是现代网络浏览器具有 adefer
和async
属性的原因。
- Opera 很特别,但我们会忽略它。
- 或整个浏览器,具体取决于