JavaScript练手小技巧:一文看懂<script>标签的 ansyc 和 defer

<script>标签的 ansycdefer 属性。只对外部加载 JS 文件有效。

<script src="js/app.js"  async></script>
<script src="js/app.js"  defer></script>
  • 普通加载 js(同步加载):会打断 HTML 渲染。

  • ansyc:异步加载js。加载完毕就执行。如果,HTML 没渲染完毕,会打断 HTML 渲染。

  • defer:异步加载 js,但是要 HTML 渲染完毕才执行。推迟 JS 执行。

示例:写一个页面有 6000 个 div。对,6000 个~!

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="js/app.js"  async></script>
</head>
<body>
    <div>0001</div>
    <div>0002</div>
    <!-- 6000 div,略。 -->
</body>
</html>

app.js

let a = document.querySelectorAll("div");
console.info( a.length );
  • 普通加载 js:会输出 0 。因为,js 很快下载完毕,并执行,但是此时,div 标签还没有开始渲染。

  • async:异步加载 js,加载完毕就会执行。每次执行的时候,div 渲染数量不一,所以每次输出都不一样。

  • defer:异步加载 js,但是要 HTML 渲染完毕才执行。因此输出 6000。

 所以,JS 代码的位置,个人建议放到 body 标签的最后,HTML内容的后面。

先加载 HTML 内容,后执行 JavaScript。可以保证 JavaScript 代码执行的时候,所需的 HTML 代码已经加载完毕,这样 JavaScript 代码就不会因为找不到标签,而报错。也不用纠结给 script 标签添加 defer 还是 ansyc 属性。

  • 8
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值