ES6入门---第二单元 模块五:模块化

js不支持模块化

注意: 需要放到服务器环境

1、如何定义模块?

export 东西

例:1.js文件中

javascript 复制代码
console.log('1模块加载了');//显示是否加载了
export const a =12;
export const b = 5;
export let c = 101;
javascript 复制代码
const a=12;
const b=5;
const c=101;

export {//可以起别名 as *** 也可以去掉
    a as aaa,
    b as banana,
    c as cup
}
javascript 复制代码
 <script type="module">
        import {a, b, c} from './modules/1.js';

        console.log(a,b,c);
    </script>

起别名版import :

javascript 复制代码
<script type="module">
        import {aaa, banana, cup} from './modules/2.js';

        console.log(aaa, banana, cup);
    </script>

补充 export default ** 作用:引用时候可以不用加{ }

2、如何使用?
在html文件里<script type="module"></script>

引入模块

import './modules/1.js';

【新增】*表示引用全部

javascript 复制代码
 <script type="module">
        import * as modTwo from './modules/2.js';
        console.log(modTwo.aaa);
    </script>
javascript 复制代码
 <script type="module">
        import mod,{show, sum, a, b} from './modules/4.js';
// show sum 是函数 
        let p1 = new mod.Person('老肖');

        console.log(p1.showName());

        show();

        sum();

        console.log(a,b);
    </script>

js文件可以引用另一个js文件里的东西 :格式同理

import: 特点

a). import 可以是相对路径,也可以是绝对路径

import 'https://code.jquery.com/jquery-3.3.1.js';

b). import模块只会导入一次,无论你引入多少次

c). import './modules/1.js'; 如果这么用,相当于引入文件

d). 有提升效果,import会自动提升到顶部,首先执行

也就是说:不管放前面放后面都最先引入

e). 导出去模块内容,如果里面有定时器更改,外面也会改动
import() 类似node里面require, 可以动态引入, 默认import语法不能写到if、for之类里面

错误例:

javascript 复制代码
 if(a==12){
            import {a} from './modules/1.js';
        }else{
            import {b} from './modules/2.js';
        }

正确例:
返回值是个promise对象

javascript 复制代码
<script type="module">
        import('./modules/1.js').then(res=>{
            console.log(res.a+res.b);
        });
    </script>

路径也可以动态

javascript 复制代码
 <script type="module">
        let sign=1;
        function config(){
            switch(sign){
                case 1:
                    return './modules/1.js';
                    break;
                case 2:
                    return './modules/2.js';
                    break;
            }
        }
        import(config(1)).then(res=>{
            $(function(){
                $('body').css({
                    background:'gray'
                })
            })
        });
    </script>

与promise结合版:

javascript 复制代码
<script type="module">
        Promise.all([
            import('./modules/1.js'),
            import('./modules/2.js')
        ]).then(([mod1,mod2])=>{
            console.log(mod1);
            console.log(mod2);
        })
    </script>

【ES2017】async await

相关推荐
子兮曰1 天前
jev-ultrafast 深度解析:7 秒订机票的浏览器 Agent 是如何炼成的
前端·后端·agent
子兮曰1 天前
Jev 爆发一周:7 秒 Agent 背后的 System One 生态与三场争议
前端·后端·ai编程
前端小万1 天前
写公众号赚了 3000 块后,我做了一款叫 "一键成稿" 的软件
前端·微信小程序
爱勇宝1 天前
ZCode 开源 24 小时:一份没有历史的账本,回答不了"有没有偷代码"
前端·后端·chatglm (智谱)
三十而立洋1 天前
Cookie 详解:从产生到安全,一次讲透
前端·javascript
卡布鲁1 天前
把一个 Vite + Vue3 应用塞进 qiankun (React + Umi3) 主站:十个坑的复盘
前端·javascript·react.js
汉堡大王95271 天前
Jev:不是聊天机器人, 而是一个智能 if 语句
前端·人工智能·后端
梦想很大很大1 天前
从运行事实到回归证据:Workrun 的 Telemetry 与 Evaluation 实践
前端·人工智能·后端
计算机魔术师1 天前
Meta Muse agent 接入 Shopify 的 Shop Pay 实现代理式购物
前端
沙蒿同学1 天前
我用 Go 搭了一条 AI Agent 流水线:从 1 张商品图到一整套淘宝详情页
前端·javascript·后端