将script标签放置body标签内底部与onload方法的区别

讨论:在HTML标记中,将script标签放置body标签内底部与onload方法的区别

            * 博主用的是火狐浏览器进行的调试,下面开始展开讨论

刚才我在做一些DOM 节点操作的时候,发现script标签存放在body底部的时候(将script标签放置head中会报错,提示:TypeError: document.body is null,就不讨论了,因为浏览器解析的顺序问题),如下代码,会出现一个问题。此时页面弹出的内容是null



    
    Title


    我是body标签的lastChild吗?


以下是浏览器弹出的对话框

将script标签放置body标签内底部与onload方法的区别_第1张图片

设置断点进行调试,watch一下document.body.lastChild,发现script是body的最后一个节点

将script标签放置body标签内底部与onload方法的区别_第2张图片

回想一下,浏览器解析html文档的时候,是从上至下来解析的,因此,当浏览器还未解析完script标签的时候,此时body的lastChild就是script标签。而并非text节点,那么问题来了,script标签的nodeValue是怎样存在的呢?

将script标签放置body标签内底部与onload方法的区别_第3张图片

因此,alert出null有了合理的解答。

但是如何解决此问题的发生呢?不想让script标签成为其lastChild节点,

尝试onload方法去解决此问题,


    我是body标签的lastChild吗?
    

进行断点调试,发现此时的lastChild已经是#text节点了,

将script标签放置body标签内底部与onload方法的区别_第4张图片

因此,当我们操作dom节点的时候,就算将script标签放置body底部,也是取代不了onload的地位!

通过这次调试,得出了一些结论,并且也建议:

  1. 将一些非第一时间参与渲染的script文件或代码放置底部可以减少访问网站的加载时间
  2. 将script放置body底部并非就等同于onload方法

你可能感兴趣的:(对javascript的理解)