【ES6】模块导入

在ES6(ECMAScript 6)中,模块导入主要通过import关键字实现,提供了几种不同的方式来导入模块中导出的内容。以下是ES6中模块导入的几种主要方式:

导出方法

1. 导入默认导出(默认暴露)

当模块中使用了export default导出内容时,可以使用不加大括号的import语句来导入该模块。这种方式导入的内容,其名称在导入时可以是任意的,因为export default导出的内容被视为该模块的默认导出。

module.js 复制代码
export default function() {  
    console.log('default function');  
}  
main.js 复制代码
import myFunction from './module.js';  
myFunction(); // 输出: default function

2. 导入命名导出(分别暴露)

当模块中使用了export(没有default)来导出多个内容(如变量、函数、类等)时,可以使用加大括号的import语句来导入特定的命名导出。

module.js 复制代码
export const name = 'John';  
export function sayHello() {  
    console.log('Hello!');  
}  
main.js 复制代码
import { name, sayHello } from './module.js';  
console.log(name); // 输出: John  
sayHello(); // 输出: Hello!

3. 导入整个模块的内容(统一暴露)

如果希望将模块中导出的所有内容作为一个对象来导入,可以使用import * as语法。这样,模块中导出的所有内容都会被封装在一个对象中,对象的属性名与模块中的导出名称相同。

module.js 复制代码
//方法一
export const name = 'John';  
export function sayHello() {  
    console.log('Hello!');  
}  
//方法二
const name = 'John';  
function sayHello() {  
    console.log('Hello!');  
}  
export { name,sayHello }
main.js 复制代码
import * as module from './module.js';  
console.log(module.name); // 输出: John  
module.sayHello(); // 输出: Hello!

打包导入

存在三个文件(moduel1、moduel2、moduel3)暴露出方法,如果在多个文件内使用这三个文件中暴露的方法,则使用打包导入,可以简化代码

app.js 复制代码
import * as m1 from "./moduel1.js";
import * as m2 from "./moduel2.js";
import * as m3 from "./moduel3.js";
html 复制代码
 <script src="./src/js/app.js" type="module"></script>

相关内容

解构模式以及重命名

module.js 复制代码
export const name = 'John';  
export function sayHello() {  
    console.log('Hello!');  
}  
main.js 复制代码
import { name as username, sayHello as printhello } from './module.js';  
console.log(username); // 输出: John  
printhello(); // 输出: Hello!

注意事项

  • import语句会提升(hoisting)到模块的顶部,但实际的执行会在模块解析阶段之后,这意味着在import语句之前不能使用被导入的模块内容。
  • import语句是静态的,意味着它不能使用表达式或变量来动态地解析模块路径或导入内容。
  • 每个模块都是单例的,即无论导入多少次,都只会在第一次导入时加载一次,之后的导入都会直接从内存中读取。

通过上述方式,ES6的模块导入提供了灵活且强大的功能,使得模块间的依赖管理更加清晰和方便。

相关推荐
小薛博客16 分钟前
3、整合前端基础交互页面
java·前端·ai·交互
@蓝莓果粒茶20 分钟前
LeetCode第158题_用Read4读取N个字符 II
前端·c++·python·算法·leetcode·职场和发展·c#
天天扭码22 分钟前
【硬核教程】从入门到入土!彻底吃透 JavaScript 中 this 关键字这一篇就够了
前端·javascript·面试
Mintopia1 小时前
计算机图形学学习指南
前端·javascript·计算机图形学
Mintopia1 小时前
three.js 中的动画(animation)
前端·javascript·three.js
AI大模型顾潇1 小时前
[特殊字符] Prompt如何驱动大模型对本地文件实现自主变更:Cline技术深度解析
前端·人工智能·llm·微调·prompt·编程·ai大模型
一颗不甘坠落的流星1 小时前
【JS】计算任意字符串的像素宽度(px)
javascript·react.js·ecmascript
z_mazin1 小时前
JavaScript 渲染内容爬取:Puppeteer 入门
开发语言·javascript·ecmascript
小小小小宇1 小时前
React中 useEffect和useLayoutEffect源码原理
前端
AlexJee1 小时前
在vue3中使用vue-cropper完成头像裁剪上传图片功能
前端