同一个页面,四个脚本,看到的世界不一样

所有输出会同时进浏览器控制台和下面的「迷你控制台」——示例里的结果直接留在页面上,方便对照。

[迷你控制台]

一、每个脚本都去看一眼 #late,看到的却不同

下面四个脚本语句一模一样:读取 document.getElementById('late') 并记录它当时是否存在。差别只在位置和类型。

我是 #late,在 ①②③ 之后才出现

脚本位置与类型当时拿到的 #late

null 表示「执行时这个元素还不存在」,[object HTMLSpanElement] 表示拿到了。defer 脚本虽写在 #late 前面,执行却在解析完成之后——这就是它的价值。

二、往同一个按钮上绑多个处理函数

分别点两个按钮:左边一次冒三条,右边只剩最后一条。这只是 addEventListener 的第一个好处,事件机制在第十五章展开。

三、普通脚本之间共享全局作用域,module 不会

模块有自己的作用域,只通过 export / import 对外交流——这是第二十章「模块化」的出发点。