深入理解 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()。


相关文章
|
3月前
|
JavaScript 前端开发 编译器
解锁JavaScript模块化编程新纪元:从CommonJS的基石到ES Modules的飞跃,探索代码组织的艺术与科学
【8月更文挑战第27天】随着Web应用复杂度的提升,JavaScript模块化编程变得至关重要,它能有效降低代码耦合度并提高项目可维护性及扩展性。从CommonJS到ES Modules,模块化标准经历了显著的发展。CommonJS最初专为服务器端设计,通过`require()`同步加载模块。而ES Modules作为官方标准,支持异步加载,更适合浏览器环境,并且能够进行静态分析以优化性能。这两种标准各有特色,但ES Modules凭借其更广泛的跨平台兼容性和现代语法逐渐成为主流。这一演进不仅标志着JavaScript模块化的成熟,也反映了整个JavaScript生态系统的不断完善。
51 3
|
1月前
|
XML JavaScript 前端开发
JavaScript控制台:提升Web开发技能的秘密武器
作为Web开发人员,掌握JavaScript控制台中的各种方法至关重要。本文介绍了22种实用的console方法,从基本的log()到高级的profile()和memory,每种方法都配有示例和说明,帮助开发者更高效地调试和记录信息。通过了解这些工具,您可以优化代码、提高开发速度,减少错误,使编码过程更加顺畅愉快。
37 1
JavaScript控制台:提升Web开发技能的秘密武器
|
28天前
|
JavaScript 前端开发 编译器
掌握现代化JavaScript:ECMAScript提案与特性
【10月更文挑战第13天】本文介绍了ECMAScript(ES)的最新提案与特性,包括可选链、空值合并运算符、类字段和顶层Await等。通过跟踪TC39提案、使用Babel或TypeScript、测试兼容性以及逐步迁移,开发者可以高效地采用这些新特性,简化代码、提高开发效率并增强应用功能。文章还提供了实战技巧,帮助开发者在现代Web开发中充分利用这些现代化的特性。
|
2月前
|
Web App开发 JavaScript 前端开发
探索现代JavaScript开发:ECMAScript提案的未来
JavaScript是最受欢迎的编程语言之一,其发展迅速。ECMAScript(JS的标准化版本)的提案和更新为其带来了诸多新特性和改进。本文将介绍值得关注的ECMAScript提案,如可选链、空值合并运算符、逻辑赋值运算符、类字段和顶级Await,并展示如何利用这些新特性提升开发效率和代码质量。通过关注TC39提案流程、使用Babel和TypeScript等工具,开发者可以提前体验并利用这些新特性。随着JavaScript的不断进步,未来将有更多令人期待的功能加入。
|
2月前
|
存储 JavaScript 前端开发
[JS] ES Modules的运作原理
【9月更文挑战第16天】ES Modules(ECMAScript Modules)是 JavaScript 中的一种模块化开发规范,适用于浏览器和 Node.js 环境。它通过 `export` 和 `import` 关键字实现模块的导出与导入。模块定义清晰,便于维护和测试。JavaScript 引擎会在执行前进行静态分析,确保模块按需加载,并处理循环依赖。ES Modules 支持静态类型检查,现代浏览器已原生支持,还提供动态导入功能,增强了代码的灵活性和性能。这一规范显著提升了代码的组织和管理效率。
|
3月前
|
JavaScript 前端开发 API
JS 与ECMAScript的关系、历史和未来发展
JS 与ECMAScript的关系、历史和未来发展
|
5月前
|
JavaScript 前端开发 编译器
ECMAScript与JavaScript:一场语言的邂逅
ECMAScript与JavaScript:一场语言的邂逅
|
5月前
|
JavaScript 前端开发 程序员
探索Vue.js宝库:解锁基础知识与实用技能之门(1. 数据绑定与响应式 2. 条件与循环 3. 组件化开发;1. 路由管理与导航 2. 状态管理与Vuex 3. Vue.js的生命周期)
探索Vue.js宝库:解锁基础知识与实用技能之门(1. 数据绑定与响应式 2. 条件与循环 3. 组件化开发;1. 路由管理与导航 2. 状态管理与Vuex 3. Vue.js的生命周期)
48 1
|
5月前
|
前端开发 JavaScript 程序员
探索JavaScript宝库:打开基础知识与实用技能之门(数据类型与变量+ 条件与循环+函数与模块+DOM+异常+ES6)
探索JavaScript宝库:打开基础知识与实用技能之门(数据类型与变量+ 条件与循环+函数与模块+DOM+异常+ES6)
33 0
|
5月前
|
JavaScript 前端开发
《编程之光:解密ECMAScript与JavaScript的微妙关系》
《编程之光:解密ECMAScript与JavaScript的微妙关系》
40 0