-1
var a = document.querySelectorAll('div');
console.log(a)
alert(11)

浏览器先输出控制台的内容,然后alert然而,改变demo

var a = document.querySelectorAll('div')[0];
console.log(a)
alert(11)

浏览器先alert,然后控制台输出内容,同样适用document.getElementsByClassName,查了半天不成功,还望解答

4

1 回答 1

0

在“你不懂 JS:异步与性能”第 1 章中:

没有关于这些console.*方法如何工作的规范或一组要求——它们不是 JavaScript 的正式组成部分,而是由托管环境添加到 JS 中(参见本书系列的类型和语法标题)。

因此,不同的浏览器和 JS 环境随心所欲,这有时会导致令人困惑的行为

特别是,有些浏览器和某些条件实际上console.log(..)没有立即输出它给出的内容。这可能发生的主要原因是因为 I/O 是许多程序(不仅仅是 JS)的一个非常缓慢且阻塞的部分。因此,浏览器在后台异步处理控制台 I/O 可能会更好(从页面/UI 角度),而您甚至可能不知道发生了这种情况。

从输出中可以看出,console.log(a)实际上是在 之前执行alert(11)的,只是 a 的值没有立即显示。

我们点击确定按钮后,

如您所见,div标签位于结果的第一行。undefined下一行中的 是 的结果alert(11)

于 2018-07-06T14:18:55.660 回答