JS高程红宝读书笔记01 - 在html中使用javascript

在html中使用javascript

1.内嵌式:

一般在<body>标签的尾部添加<script>标签,并且指定type="text/javascript"
比如这样:

<html>
    <head>
    </head>
    <body>
        <!--内容-->
        <script type="text/javascript">
            console.log('Tag should be here');
        </scipt>
    <body>
</html>

这样的好处是:

  1. 避免脚本加载阻塞文档渲染
  2. 避免脚本操作DOM时文档流未渲染完毕导致获取DOM元素失败。

看个例子:

<html>
    <head>
        <script type = "text/javascript">
                let btn = document.getElementsByTagName('button')[0];
                // do sth with btn
                // error 
        </script>
    </head>
    <body>
        <!-- content here -->
                <button>按钮</button>
    </body>
</html>

报错:


原因是先加载了脚本内的内容,而此时文档流未渲染,并没有<button>标签存在,所以获取button得到的结果为undefined.

解决办法
将script里的内容放置到window.onload{ }里,在文档加载完成后会触发load事件。此时,在文档中的所有对象都在DOM中,所有图片,脚本,链接以及子框都完成了加载。

2.外部引入

外部引入JS脚本文件作为最佳实践,src作为外部引入资源的重要属性,用来指定外部资源的引入路径,可以是相对路径,也可以是绝对路径:

<html>
    <head>
        <script type = "text/javascript" src="js/相对路径.js"></script>
        <script type = "text/javascript" src="desktop/example/js/绝对路径.js"></script>
    </head>
    <body>
        <!-- content here -->
    </body>
</html>

同样,如同嵌入式JS一样,外部引入JS同样也需要考虑使得文档流优先加载的问题。

延迟脚本

使用defer表明外部引入的脚本将按照它们出现的顺序先后执行,也就是说先出现的脚本会先执行,然后再到后者。但是在现实里,延迟脚本不一定会按照顺序执行,也不一定会在DOMContentLoaded事件触发前执行,因此最好只包含一个延迟脚本。(顺序得不到保障,无法保证预期效果,容易出错)

<html>
    <head>
        <script type="text/javascript" defer="defer" src="我会先执行.js"></script>
        <script type="text/javascript" defer="defer" src="我会后执行.js"></script>
    </head>
    <body>
        <!-- content here -->
    </body>
</html>

异步脚本

async表示浏览器立即下载物件,但是不保证执行先后顺序,指定为async的目的是不让页面等待两个脚本的下载和执行,从而可以异步加载页面其他内容。所以设为async的脚本最好不要进行dom操作,否则有可能出现加载页面时出现错误。

<html>
    <head>
        <script type="text/javascript" defer="defer" src="我不一定第二个执行.js"></script>
        <script type="text/javascript" defer="defer" src="我不一定第二个执行.js"></script>
    </head>
    <body>
        <!-- 我不会等待两个脚本文件的加载,我会直接进行页面渲染 -->
    </body>
</html>

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 简单介绍JavaScript的发展历史 JavaScript因互联网而生,回顾它的历史要从浏览器的历史讲起。 19...
    _Dot912阅读 505评论 0 3
  • 1. CSS和JS在网页中的放置顺序是怎样的? css放在head标签内,防止渲染时出现白屏 js放在最后body...
    billa_8f6b阅读 584评论 0 0
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 172,985评论 25 708
  • 1、耶和华啊!我的敌人何其加增,有许多人起来攻击我; 2、有许多人议论我说:“他得不着神的帮助。” 3、但你耶和华...
    我在天上有个家阅读 1,591评论 0 0
  • 春天的那把伞 收纳了晶莹、柔和的春雨 滋润了万物 苏醒了沉睡的大地 夏天的那把伞 抵挡了酷热、强烈的夏日 带来了凉...
    幽兰33阅读 324评论 0 4