IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> js 模块化,AMD、CMD以及commonjs和es6模块化 -> 正文阅读

[JavaScript知识库]js 模块化,AMD、CMD以及commonjs和es6模块化

AMD规范

(来自百度百科)
AMD全称是Asynchronous Module Definition,即异步模块加载机制,规范简单到只有一个API,即define函数:
define([module-name?], [array-of-dependencies?], [module-factory-or-object]);
其中:
module-name: 模块标识,可以省略。
array-of-dependencies: 所依赖的模块,可以省略。
module-factory-or-object: 模块的实现,或者一个JavaScript对象。
requirejs等就是是用这个规范开发的

require([module], callback);

amd要求在使用前需要先把所有的模块都写出来

CMD规范

CMD (Common Module Definition),同样是异步加载模块, 是seajs推崇的规范,CMD则是依赖就近,用的时候再require。它写起来是这样的:

define(function(require, exports, module) {
   var clock = require('clock');
   clock.start();
});

Commonjs

Commonjs和es6模块化是本文的重点,Commonjs主要应用的环境是nodejs,它具有下列特点

模块是值的“浅”拷贝

抛出变量以及修改的函数

// export.js
var a = { b: "b" }
var obj = {
    a: a
}

var num = 3

function add() {
    num++
}

function change() {
    obj.a.b = "c"
}

module.exports = {
    obj,
    num,
    add,
    change
}

接受模块内的变量并操作

// require.js
const {obj,num,add,change} = require("./export.js")

console.log(obj)  // { a: { b: 'b' } }
console.log(num)  //  3

add()
change()
console.log(obj)  // { a: { b: 'c' } }
console.log(num)  // 3

观察发现对于引用类的值的修改,修改还是会影响原值的

执行时间

当require运行的时候,便会加载这个模块,这个模块就全部加载并运行,当下一次取值的时候是从缓存中读取的值

同步加载

这里创建三个js文件相互引用


// a.js
console.log('a');
const importFunc = () => {
  console.log(require('./b').b);
}

importFunc()


module.exports = {
  importFunc
}
// b.js
console.log("b")
const b = 1
module.exports = {b}
// c.js
const {importFunc} = require("./a") 
console.log("c")

运行结果显示
在这里插入图片描述
这里c最后被打印,被之前的加载语句所阻塞了

es6模块化

引入的是值的引用

d.js

// d.js
console.log('d');
const importFunc = () => {
  import("./e.js").then(({ e }) => {
    console.log(e)
  })
}
importFunc()
var obj = {
  a: "a"
}
export {
  importFunc,
  obj
}
// f.js
import { importFunc, obj } from "./d.js"
console.log(obj)
obj = "a"  // f.js:4 Uncaught TypeError: Assignment to constant variable.
console.log("f")

这里一旦修改了obj的值就会报错,但是给obj赋值修改参数没问题

引入时间

import引入的模块只有在编译的时候才会引入指定模块

异步加载

将上文的f.js注释掉报错代码

// f.js
import { importFunc, obj } from "./d.js"
// console.log(obj)
// obj = "a"  // f.js:4 Uncaught TypeError: Assignment to constant variable.
console.log("f")
// e.js
console.log("e")
const e = 2
export { e }
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script type="module" src="./f.js"></script>
</head>
<body>
    
</body>

</html>

html引入后放入服务器在浏览器打开,得到如下打印
在这里插入图片描述
证明es6的模块化是异步加载的

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-03-03 16:03:16  更:2022-03-03 16:03:41 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 8:56:13-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码