学习笔记 JavaScript ES6 模块化Module

2023-10-27

学习内容:

  • export
  • import
  • as 
  • import default

模块化的规范

1、CommonJS : Node.js

这是出现的比较早的一种规范,他是在Node.js中的一种模块化规范,他的局限性是基于Node虽然能在服务器端实现模块的同步加载,但仅仅局限在服务端。

所以又产生了AMD的规范。

2、AMD : require.js

AMD是require.js在推广过程中对模块化定义的规范化产出。记得以前用到前端框架时,总要引入一个require.js,就可以实现模块化。AMD叫异步模块定义,可以定义回调函数,回调函数里面可以等到模块加载完成,再在回调函数里面实现想要的功能。AMD推崇的是依赖前置,提前执行。与AMD对应的还有CMD。

3、CMD : sea.js

CMD是sea.js在推广过程中对模块化定义的规范化产出。sea.js是阿里推出的,现已不再运维。CMD推崇依赖就近,延迟执行。

上面三种都是出现比较早的模块规范化,2015年出现了ES6。

4、ES6

2015年推出了ES6的模块化规范,正式纳入JS标准。

下面来学习在ES6中如何导入导出模块。

export/import

当用export 关键字导出模块的时,比如 :

export a = 7

则在import时,导入的名称和导出的名称必须完全一样(上面导出a,下面必须导入a才行),否则找不到,如:

import {a} from './module.js' // "./"表示当前文件夹下,后缀名js可以不写
console.log(a);
console.log(aa);

-----------------------------------------------
7
Uncaught ReferenceError: aa is not defined

再来看,如果export导出了多个模块,有变量和方法,如:

export const a = 7;
export const b = 6;
export const sum = (x, y) => x + y;

 import时,{}里面可以用逗号分隔,如:

import { a, b, sum } from "./module.js"; // "./"表示当前文件夹下,后缀名js可以不写
console.log(a);
console.log(b);
console.log(sum(1, 2)); // 和正常的方法调用一样
 
--------------
7
6
3 // 1 + 2

如果export是对象的话,需要在对象上加上{},如:

const obj = {
    name : 'Sure'
}

export {obj}

 import:

import {obj} from './module'

console.log(obj);

--------------------
{name: 'Sure'}

也可以一次导出多个,如:

const a = 7;
const b = 6;
const sum = (x, y) => x + y;

const obj = {
  name: "Sure",
};

export { a, b, sum, obj };

再复杂一点,加一个类进去,如:

export

class Person {
  constructor(name) {
    this.name = name;
  }
  showName() {
    console.log(this.name);
  }
}

export { Person };

import 

import { Person } from "./module.js"; // "./"表示当前文件夹下,后缀名js可以不写

let p = new Person('Sure')
console.log(p.name);

import时可以使用别名,用as即可,但是as以后,之前的变量名就不可以用了,如:

import { a as aa } from "./module";
console.log(aa);
console.log(a);

----------------------------------------------------
7
Uncaught ReferenceError: a is not defined

另一种导出方式,export default ,注意:每个module只能有一个default。

const a = 7;
export default a

导入:

import abc from './module'
console.log(abc);

------
7

 export default导出全部的内容:

const a = 7;
const b = 6;
const sum = (x, y) => x + y;

const obj = {
  name: "Sure",
};

class Person {
  constructor(name) {
    this.name = name;
  }
  showName() {}
}

export default { a, b, sum, obj, Person };

导入时,moduleObj这个名称可以随意定义:

import moduleObj from "./module.js"; // "./"表示当前文件夹下,后缀名js可以不写
console.log(moduleObj);


--------------------------------------------
{a: 7, b: 6, obj: {…}, sum: ƒ, Person: ƒ}
Person: ƒ Person(name)
a: 7
b: 6
obj: {name: 'Sure'}
sum: ƒ sum(x, y)

还有一种导入方式,是用在导出内容特别多时,import * as :

注意看下面的输出。

import * as mod from './module'

console.log(mod);

--------------------------------------------------------------------------------------
Module {default: {…}, __esModule: true, Symbol(Symbol.toStringTag): 'Module'}
default: {a: 7, b: 6, obj: {…}, sum: ƒ, Person: ƒ}
__esModule: true
Symbol(Symbol.toStringTag): "Module"
[[Prototype]]: Object

上面的输出可以这样取值:

import * as mod from './module'

console.log(mod.default.a);
console.log(mod.default.sum(1,2))

------
7
3

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

学习笔记 JavaScript ES6 模块化Module 的相关文章

随机推荐

  • python PIL open 无法打开 webp,jpeg等图像 ,报错 PIL.UnidentifiedImageError: cannot identify image file

    问题 使用 PIL Image open 能正常打开大部分图像文件 但是webp格式的图像无法打开 有一些jpg png图像也无法打开 报错 PIL UnidentifiedImageError cannot identify image
  • 简析:阿里巴巴最近20个月的拆分史

    author skate time 2013 02 20 在不到20个月的时间里 阿里巴巴集团接连发生几轮分拆 还伴以将云OS剥离出阿里云这样的突发动作 在大公司界 无论是传统公司还是互联网公司 这种情况是罕见的 一般公司 经不起这样频繁的
  • c++基础(华清远见学习之星)

    最近刚接触c 与c还是有很多不同的 如果有其写c的操作 头文件用
  • Linux查看CPU支持的指令集

    gcc march native Q help target grep march 或者 cat proc cpuinfo Intel的CPU 可以去官网查看能支持什么指令集 https ark intel com content www
  • STM32F103基于W5500实现Modbus简单TCP通信

    文章目录 一 Modbus TCP协议 1 查询报文 2 响应报文 二 从机代码 1 初始化从机网络 2 简单响应函数 3 main函数循环等待连接 三 效果 四 总结 五 源码 一 Modbus TCP协议 功能码 作用 01 读取线圈状
  • 正则表达式和通配符的区别

    http www eetop cn blog html 65 554165 26125 html http blog csdn net whxlovehy article details 6052366 Explain 1 1 正则表达式是
  • Python Selenium/WebDriver 操作手册新版

    写在前面 本文为个人整理手册 有错误的地方欢迎指正 参考链接较多 重点参考 侵权删 什么是Selenium 通俗的解释 引用 Selenium是一个Web的自动化测试工具 最初是为网站自动化测试而开发的 类型像我们玩游戏用的按键精灵 可以按
  • Hadoop集群搭建记录

    本文目录 写在前面 写在前面 本系列文章索引以及一些默认好的条件在 传送门 因为课程需要 我们要进行Eclipse的安装操作 eclipse需要是CentOS下的 网址在 传送门 在出现的页面中 根据自身的机型选择合适的类型 博主为x86
  • 基础三 * 下 【vim 编辑器】 【管道】【文件内容浏览命令】

    目录 vim 编辑器 管道 文件内容浏览命令 练习 vim 编辑器 前言须知 1 vim 是个啥 其实 vim 类似于 windows 上的记事本 能够编辑 保存 复制 粘贴 搜索 替换等等
  • AI开放平台能力集合

    背景 随着AI技术的兴起及其逐步在各业务领域落地 越来越多的公司将其业务中使用到的底层AI能力开放出来 通过付费的模式提供给不具备建立AI能力的公司使用 AI技术包含非常多不同的方向 如文档识别 人脸人体识别 NLP语义分析以及大数据挖掘等
  • Linaro 作为白金会员加盟 Zephyr 项目

    转载自 https www zephyrproject org linaro joins zephyrtm project platinum member 作者 Zephyr 本文地址 https linux cn article 7817
  • Mybatis-Plus:实现自定义SQL

    目录 1 简介 2 自定义SQL具体实现 2 1 注解SQL 2 2 Wrapper传参 注解SQL 2 3 Wrapper传参 xml文件SQL 2 4 正常传参 XML文件SQL 3 总结 1 简介 Mybatis Plus 以下简称M
  • mybaties-plus 代码成器使用笔记

    1 简介 MyBatis Plus Generator 可以生成 Controller Service Mapper Entity 也支持自写 SQL 的 mapper 步骤 1 数据库中创建相应表 2 引入maven依赖 freemark
  • 用gdb调试core dump文件

    尊重原创 http blog chinaunix net u2 83905 showart 2134570 html 在Unix系统下 应用程序崩溃 一般会产生core文件 如何根据core文件查找问题的所在 并做相应的分析和调试 是非常重
  • php获取当前文件夹下所有图片大小,PHP获取文件夹大小函数用法实例

    本文实例讲述了PHP获取文件夹大小函数用法 分享给大家供大家参考 具体如下 获取文件夹大小 function getDirSize dir handle opendir dir while false FolderOrFile readdi
  • layui layer弹出层通过offset属性定位弹出层在光标处弹出(event.clientY和event.clientX)失败。

    将弹出层弹出位置定位到光标处 大小超过父弹出层的部分无法显示 js 页面层 自定义 more click function event layer open id moreMenu type 1 title false closeBtn 0
  • BACnet协议栈apdu_set_confirmed_handler函数中的确认型回调函数是如何传参的

    BACnet协议栈中的确认型回调函数通常会被传入三个参数 BACNET ADDRESS src uint8 t apdu和uint16 t apdu len BACNET ADDRESS src参数表示请求的源地址 它是一个指向BACNET
  • Redis7之实现分布式锁(九)

    9 1 分布式锁需要的条件和刚需 独占性 任何时刻有且只有一个线程持有这个锁 高可用 若redis集群环境下 不能因为某一个节点挂了而出现获取锁和释放锁失败的情况 高并发请求下 依旧性能很好 防死锁 不能出现死锁问题 必须有超时重试机制或者
  • QT 如何保存登陆的用户信息

    使用QQ大家多知道需要一个账户来登陆 不止QQ啦 其实还有很多需要账户的 所以就需要将登陆用户的信息保存下来 此文使用的是 申请new一个指针来保存登陆用户的信息 并设置成后续的的操作都能读到此登陆值 好了 直接上代码 先看头文件怎么写 i
  • 学习笔记 JavaScript ES6 模块化Module

    学习内容 export import as import default 模块化的规范 1 CommonJS Node js 这是出现的比较早的一种规范 他是在Node js中的一种模块化规范 他的局限性是基于Node虽然能在服务器端实现模