学习笔记 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 的相关文章

  • 有没有办法在 React.render() 函数中渲染多个 React 组件?

    例如我可以这样做 import React from react import PanelA from panelA jsx import PanelB from panelB jsx React render
  • Ajax文件上传

    我想使用 Ajax 和 php 上传文件 我有一个表格
  • 将 R (ramda) 导入 typescript .ts 文件

    我正在尝试使用Ramda js如下
  • 按键对 JavaScript 对象进行排序

    我需要按键对 JavaScript 对象进行排序 因此 以下内容 b asdsad c masdas a dsfdsfsdf 会成为 a dsfdsfsdf b asdsad c masdas 这个问题的其他答案已经过时 与实施现实不符 并
  • 如何设置上传的文件名?

    By using multer I made it to request image file like this 这个文件存储在我设置的 上传 文件夹中 我的代码如下 var multer require multer var uploa
  • 在其他不可滚动的 div 上滚动时如何滚动可滚动的 div?

    我知道这个问题听起来很令人困惑 但这就是我想要做的 在下面的代码片段中 如果用户在绿色 div 上滚动 我希望黄色 div 相应地滚动 就像滚动黄色 div 一样 请注意 黄色 div 有overflow auto 但绿色的则不然 docu
  • 如何在bootstrap中默认隐藏侧边栏?

    我在这里有一个很好的参考 作为 Bootstrap 在设计 Web 表单应用程序时的侧边栏 http startbootstrap com template overviews simple sidebar http startbootst
  • Javascript 在另一个函数中检测“Shift”键按下

    我正在从 Flash 影片 使用外部接口 调用我的 html 页面中的 Javascript 函数 并且我想知道调用该函数时用户是否按下了 Shift 键 例如 如果我通过鼠标单击调用该函数 这似乎很简单 因为我可以传递事件并检查 if e
  • Sequelize - 使用 es6 和模块运行迁移

    我不确定我是否做错了什么或者什么 我觉得我正在运行一个现代的 相当常见的堆栈 但我无法让新的 Sequelize v6 与我的设置完美配合 我在 Node v14 17 Sequelize v6 6 2 上 在我的 package json
  • React 应用程序中的 addEventListener 不起作用

    一些背景 我正在尝试消费自定义网络组件在 React 应用程序中并尝试监听来自 Web 组件的事件 我相信您不能只在自定义 Web 组件上以通常的反应方式处理事件 i e
  • 如何在php中使用一张图像绘制形状

    我需要使用图像的一部分来创建帧图像 例如 用户将从后端上传图像片段 现在我需要根据前端用户的要求在前端创建一个框架 用户将选择框架的高度和宽度 然后他将选择该图像片段 如下所示 我没有办法做到这一点 我尝试通过 css 和 html can
  • Firebase 身份验证在 iOS 登录时卡住,没有错误

    我已经使用电子邮件和密码设置了 firebase 身份验证登录的最基本实现 firebase auth signInWithEmailAndPassword email password then gt console log Logged
  • JavaScript Promise 不执行 .then()

    我在 JavaScript 中的 Promise 方面遇到了一些问题 我想做的是获得一个地址列表 然后对于每个地址 我需要调用地理编码 API 来获取 lat lng 然后我将继续将标记与热图一起绘制 这是我的代码 let promiseK
  • 如何使用 JavaScript 获取元素的填充值?

    我有一个textarea在我的 HTML 中 我需要获取整数或浮点形式的填充数值 以像素为单位 我如何使用 JavaScript 获取它 我没有使用 jQuery 所以我正在寻找纯 JavaScript 解决方案 这将返回padding l
  • JavaScript 中的实时摩尔斯电码转换器

    在看到谷歌关于莫尔斯电码 gmail 的愚人节笑话后 我想我应该尝试用 javascript 创建一个实时莫尔斯电码转换器 我正在使用正则表达式和替换将莫尔斯电码更改为字符 例如 replace g a replace g r 我遇到的问题
  • 不使用控件时,视频元素在 Chrome 中消失

    So I think这是一个浏览器错误 它出现在一个更复杂的设计 网站中 但我已经进行了很好的尝试 简化了我的代码和设计等 并发现了以下内容 嵌入时
  • Javascript onload 不起作用[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我正在使用
  • 如何为 Imagus 悬停缩放扩展开发自定义过滤器?

    当我读到关于悬停缩放是邪恶的 http www reddit com r YouShouldKnow comments 1wjrc8 ysk that the hover zoom extension is spyware 哎呀 有两篇文章
  • 搜索多维数组 JavaScript

    我有一个如下所示的数组 selected products 0 r1 7up 61 Albertsons selected products 1 r3 Arrowhead 78 Arrowhead selected products 2 r
  • 如何获得 JavaScript 阶乘程序的循环来显示所使用的工作?

    你好 我面临着用 JavaScript 编写一个程序的挑战 尽管我对它不太了解 但它要求用户输入一个数字 然后计算该数字的阶乘 我使用了已经提出的问题并设法使计算正常工作 但无法获得所需的输出 我必须在以下输出中获取它 而不使用任何花哨的库

随机推荐

  • 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虽然能在服务器端实现模