zoukankan      html  css  js  c++  java
  • ES6知识点整理之----Module----加载实现

    浏览器加载

    传统方法

    <!-- 页面内嵌的脚本 -->
    <script type="application/javascript">
      // module code
    </script>
    
    <!-- 外部脚本 -->
    <script type="application/javascript" src="path/to/myModule.js">
    </script>
    
    //浏览器脚本的默认语言是 JavaScript,type="application/javascript"可以省略。

    <script>标签打开deferasync属性,脚本就会异步加载。

    • defer:渲染完再执行,有多个defer脚本时,按页面出现的顺序加载
    • async:下载完就执行,哪个加载完成了就执行哪个模块
    <script src="path/to/myModule.js" defer></script>
    <script src="path/to/myModule.js" async></script>

    ES6模块加载

    也使用<script>标签,但是要加入type="module"属性。

    <script type="module" src="./foo.js"></script>

    浏览器对于带有type="module"<script>,都是异步加载。等到整个页面渲染完,再执行模块脚本,等同于打开了<script>标签的defer属性。

    <script type="module" src="./foo.js"></script>
    <!-- 等同于 -->
    <script type="module" src="./foo.js" defer></script>

    ES6 模块也允许内嵌在网页中,语法行为与加载外部脚本完全一致。

    <script type="module">
      import utils from "./utils.js";
    
      // other code
    </script>

    ES6 模块与 CommonJS 模块的差异

    • CommonJS 模块输出的是一个值的拷贝,ES6 模块输出的是值的引用。
    • CommonJS 模块是运行时加载,ES6 模块是编译时输出接口。

    CommonJS 模块输出的是值的拷贝,也就是说,一旦输出一个值,模块内部的变化就影响不到这个值。除非写成一个函数,才能得到内部变动后的值。

    ES6 模块遇到模块加载命令import,就会生成一个只读引用。等到脚本真正执行时,再根据这个只读引用,到被加载的那个模块里面去取值。

    由于 ES6 输入的模块变量,只是一个“符号连接”,所以这个变量是只读的,对它进行重新赋值会报错。

    Node 加载(略)

  • 相关阅读:
    DNS服务器安全之通过ipset对DNS异常解析流量的源IP地址进行管控
    C# Windows Api的一些方法 封装 以及 常用参数
    Java基础—异常(1)
    Java基础——异常(2)
    vb6 wininet
    vb6转16进制
    Java 中与(&)短路与(&&)以及 或(|)短路或(||)的关系
    关于面向对象的简单总结
    javaScript的基本规范
    关于TCP传输的三次握手四次挥手策略
  • 原文地址:https://www.cnblogs.com/adhehe/p/9688029.html
Copyright © 2011-2022 走看看