深入理解 ECMAScript modules:提升你的 JavaScript 技能(三)

简介: 深入理解 ECMAScript modules:提升你的 JavaScript 技能(三)

四、模块导入的写法


默认导入


在JavaScript中,可以使用import语句的default关键字来导入一个模块的默认导出。


例如:

// 默认导出
export default function myFunction() {
  // ...
}

// 导入默认导出
import myFunction from './my-module.js';

在导入时,如果对应的模块没有默认导出,或者使用了错误的名称,那么在运行时会出现ReferenceError错误。


注意,一个模块只能有一个默认导出。如果一个模块中有多个默认导出,那么在导入时需要使用import语句的as关键字来指定要导入的默认导出。


例如:

// 默认导出
export default function myFunction() {
  // ...
}

export default class MyClass {
  // ...
}

// 导入默认导出
import myFunction from './my-module.js';

// 或者

import MyClass from './my-module.js';

在导入时,如果对应的模块没有默认导出,或者使用了错误的名称,那么在运行时会出现ReferenceError错误。


命名导入


在JavaScript中,可以使用import语句来命名导入模块中的成员。


例如:

// 导出成员
export function myFunction() {
  // ...
}

// 命名导入
import {myFunction} from './my-module.js';

或者:

// 导出成员
export function myFunction() {
  // ...
}

// 命名导入并重命名
import {myFunction as fn} from './my-module.js';

在导入时,如果对应的模块没有导出该成员,或者使用了错误的名称,那么在运行时会出现ReferenceError错误。


注意,命名导入不会影响原始模块中的成员,它们在原始模块中仍然存在。


只加载模块,不导入任何东西


在JavaScript中,如果你只是想加载一个模块而不导入任何东西,你可以使用import语句的import关键字。这样做的好处是,你可以确保模块中的代码被执行,但是你不会在当前作用域中导入任何变量或函数。


例如:

// my-module.js
export function myFunction() {
  console.log('Hello, world!');
}

// main.js
import './my-module.js';

// 执行 main.js 后,浏览器控制台会输出 'Hello, world!'

在这个例子中,我们加载了my-module.js模块,但是并没有导入其中的任何函数或变量。因此,myFunction()main.js中是不可用的。

这种方法可以用于执行模块中的代码,但不会在当前作用域中导入任何变量或函数。


将默认导入与命名导入混合使用


在JavaScript中,你可以将默认导入与命名导入混合使用。


例如:

// my-module.js
export function myFunction() {
  console.log('Hello, world!');
}

export default class MyClass {
  constructor() {
    console.log('MyClass constructor');
  }
}

// main.js
import myFunction, { MyClass } from './my-module.js';

myFunction(); // 输出 'Hello, world!'
new MyClass(); // 输出 'MyClass constructor'

在这个例子中,我们首先使用import myFunction, { MyClass } from './my-module.js';将myFunction作为命名导入导入,同时将MyClass作为默认导入导入。然后我们可以直接使用myFunction()和new MyClass()。


你也可以将默认导入与命名导入的顺序交换,这不会影响导入的结果。

// main.js
import { MyClass }, myFunction from './my-module.js';

myFunction(); // 输出 'Hello, world!'
new MyClass(); // 输出 'MyClass constructor'

在这个例子中,我们首先使用import { MyClass }, myFunction from './my-module.js';将MyClass作为命名导入导入,同时将myFunction作为默认导入导入,然后同样可以直接使用myFunction()和new MyClass()。


相关文章
|
1月前
|
缓存 JavaScript 前端开发
深入理解 ECMAScript modules:提升你的 JavaScript 技能(五)
深入理解 ECMAScript modules:提升你的 JavaScript 技能(五)
|
1月前
|
JavaScript 前端开发
深入理解 ECMAScript modules:提升你的 JavaScript 技能(四)
深入理解 ECMAScript modules:提升你的 JavaScript 技能(四)
|
5天前
|
缓存 JavaScript 前端开发
JavaScript模块化:CommonJS与ES Modules的对比与使用
【4月更文挑战第22天】本文探讨了JavaScript模块化的两种规范——CommonJS和ES Modules。CommonJS适用于Node.js,通过`require`同步加载模块,而ES Modules(ES6模块)用于前端,支持异步加载和静态导入导出。CommonJS有缓存,ES Modules无缓存。在选择时,Node.js环境常用CommonJS,但趋势正转向ES Modules,前端项目推荐使用ES Modules以利用其优化性能的优势。
|
1月前
|
JavaScript 前端开发 开发者
深入理解 ECMAScript modules:提升你的 JavaScript 技能(六)
深入理解 ECMAScript modules:提升你的 JavaScript 技能(六)
|
2月前
|
JavaScript
Node.js【GET/POST请求、http模块、路由、创建客户端、作为中间层、文件系统模块】(二)-全面详解(学习总结---从入门到深化)
Node.js【GET/POST请求、http模块、路由、创建客户端、作为中间层、文件系统模块】(二)-全面详解(学习总结---从入门到深化)
27 0
|
2月前
|
消息中间件 Web App开发 JavaScript
Node.js【简介、安装、运行 Node.js 脚本、事件循环、ES6 作业队列、Buffer(缓冲区)、Stream(流)】(一)-全面详解(学习总结---从入门到深化)
Node.js【简介、安装、运行 Node.js 脚本、事件循环、ES6 作业队列、Buffer(缓冲区)、Stream(流)】(一)-全面详解(学习总结---从入门到深化)
77 0
|
4天前
|
JavaScript 前端开发 测试技术
学习JavaScript
【4月更文挑战第23天】学习JavaScript
11 1
|
12天前
|
JavaScript 前端开发 应用服务中间件
node.js之第一天学习
node.js之第一天学习