因为 script 是立即执行的,你 alert 的时候,body 元素里的最后一个元素还是 script 元素,后面的文本节点还没有被 parse 和生成。
你可以把 alert 放到 DOMContentLoaded 事件里,然后再跑,输出的就是 5 了。