【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的模块导入提供了灵活且强大的功能,使得模块间的依赖管理更加清晰和方便。

相关推荐
秦jh_9 分钟前
【Linux】多线程(概念,控制)
linux·运维·前端
蜗牛快跑21322 分钟前
面向对象编程 vs 函数式编程
前端·函数式编程·面向对象编程
Dread_lxy23 分钟前
vue 依赖注入(Provide、Inject )和混入(mixins)
前端·javascript·vue.js
涔溪1 小时前
Ecmascript(ES)标准
前端·elasticsearch·ecmascript
榴莲千丞1 小时前
第8章利用CSS制作导航菜单
前端·css
奔跑草-1 小时前
【前端】深入浅出 - TypeScript 的详细讲解
前端·javascript·react.js·typescript
羡与2 小时前
echarts-gl 3D柱状图配置
前端·javascript·echarts
guokanglun2 小时前
CSS样式实现3D效果
前端·css·3d
咔咔库奇2 小时前
ES6进阶知识一
前端·ecmascript·es6
前端郭德纲2 小时前
浏览器是加载ES6模块的?
javascript·算法