• js 模块化


      

    es6之前

    1.代码模块化

    通过使用立即执行函数,对象和闭包创建的模块方式称为

    作用域只有两种:全局作用域和函数作用域

    main.html

    <!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 type="text/javascript" src="./main.js"></script>
    </head>
    
    <body>
    
        <button onclick="click">点 击</button>
        <script>
            mouseCounterModule.countClick()
        </script>
    </body>
    
    </html>

    main.js

    const mouseCounterModule = function () {
       let count = 0
       const click1 = () => {
          console.log(++count)
       };
    
       return {
          countClick: () => {
             document.addEventListener("click", click1)
          }
       };
    }();

    2.模块扩展

    3.AMD模块化

     

    4.CommonJs模块化

    es6模块

     main.js

    命名导出

    //导出
    let a='aaa'
    export let b='bbb'
    export function f(){
       console.log('fff')
    }

    main.html

    需要使用花括号对

    <body>
        <script>
            // 导入命名
            import { b, f } from "./main.js"
            f()
        </script>
    </body>

    报错

     解决:script 添加 type="module" 属性

        <script type="module">
         import {b,f} from "./main.js"
         f()
        </script>

    又报错误:

     解决:

    跨域问题,需要起个服务端

     vscode安装

     运行

     ok

    全部导入

        <script type="module">
         import * as mainModule from "./main.js"
         console.log(mainModule.b)
         mainModule.f()
        </script>

    mainModule点的时候没提示?

    指定导出

    let a = 'aaa'
    let b = 'bbb'
    function f() {
        console.log('fff')
    }
    
    export {b, f}

    导出时使用别名

    export {b as bbb, f as fff}

    默认导出

    默认导出使用 export default

    一个模块里只能有一个 export default

    使用了 export default 变量函数或者类,不用加{}

    let  a = 'aaa'
    
    export default class Student {
       constructor(name) {
          this.name = name
       }
    }

    导入

        <script type="module">
            import Student from "./main.js"
            let a = new Student('li')
            console.log(a.name)
        </script>

     

    在一行里同时导入多种类型

    let  a = 'aaa'
    export let b = 'bbb'
    
    export  function f() {
       console.log('fff')
    }
    
    export default class Student {
       constructor(name) {
          this.name = name
       }
    }

    导入

        <script type="module">
            import Student, { b, f } from "./main.js"
            console.log(b)
            f()
            let a = new Student('li')
            console.log(a.name)
        </script>

    使用别名解决多个模块名称重复问题

    a1.js

    export let a = 'a1'

    a2.js

    export let a = 'a2'

    main.html

    <body>
        <script type="module">
            import {a as a1} from "./a1.js"
            import {a as a2} from "./a2.js"
            console.log(a1)
            console.log(a2)
        </script>
    </body>
  • 相关阅读:
    D11中的DecimalSeparator如何使用
    mysql必知必会(八):过滤分组
    mysql必知必会(六):正则表达式过滤
    2022年7月6日面试题
    2022年7月7日面试题(一)
    mysql必知必会(七):聚合函数
    mysql必知必会(三):排序
    mysql必知必会(四):where过滤
    mysql必知必会(五):通配符过滤
    mysql必知必会(二):查询数据
  • 原文地址:https://www.cnblogs.com/buchizaodian/p/14797227.html
Copyright © 2020-2023  润新知