【再读高程3】CH2:在HTML中使用JavaScript

73 阅读1分钟

script元素

属性功能
async异步脚本:立即下载脚本。只对外部脚本有效
defer延迟脚本:立即下载。脚本延迟到文档完全解析之后执行-遇到</html>之后
src外部脚本地址
typeMIME类型,默认是text/javascript

defer说会按照出现顺序执行,async不能保证。但实际情况defer也不一定

script标签嵌入的代码片段,会阻塞页面其他内容加载和显示

==不存在async和defer属性时,会按照script出现的先后顺序依次对他们解析。(但执行顺序不保证)==

<!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="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/angular/10.1.2/core.umd.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.13.1/umd/react.production.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.13.1/umd/react-dom.production.min.js"></script>
    <!--弱网环境。下载解析执行完成。走不到body标签了-->
    <!--嵌入脚本-->
    <script>
        function loop() {
            console.log('loop')
            for(var i = 0; i < 100000; i++) {
                console.log('')
            }
            setTimeout(function () {
                alert('settimeout不影响loop2执行')
            }, 1000 * 20)
        }
        loop()
    </script>
    <script>
        function loop2() {
            console.log('我被loop的for循环阻塞掉了')
            setTimeout(function () {
                alert('loop2')
            }, 1000 * 20)
        }
        loop2()
    </script>
</head>
<body>
我被阻塞展示了 
</body>
</html>

文档模式

标准模式: <!DOCTYPE html>表示文档类型doctypeHTML 5