模块 8 · 第 1 课(共 4)课程中的29/32~12 min
模块课程(1/4)
ESM 模块:导入/导出
当程序增长时,将所有内容都保存在一个文件中会变得很尴尬。现代 JavaScript 解决了ES模块(ESM)的问题:每个文件都是一个可以导出的模块 函数、常量、类和其他文件可以导入它们。
export
您导出想要公开的内容。两种形式:
JS
// somma.js
export function somma(a, b) {
return a + b;
}
export const PI = 3.14159;或者,在文件末尾:
JS
function somma(a, b) {
return a + b;
}
const PI = 3.14159;
export { somma, PI };import
来自另一个文件:
JS
// app.js
import { somma, PI } from './somma.js';
console.log(somma(1, 2)); // 3
console.log(PI); // 3.14159对象 { somma, PI } 是您要导入的名称列表。它们必须匹配
导出的名称。
默认导出
每个模块可以有一个“主”导出,没有名称:
JS
// log.js
export default function log(msg) {
console.log('[app]', msg);
}您可以通过在本地选择名称来导入它:
JS
import log from './log.js';
log('ciao');重命名
JS
import { somma as plus } from './somma.js';
export { somma as add } from './somma.js'; // re-export每个文件一个“命名空间”
模块是隔离的:文件中声明的变量最终不会出现在全局范围内。你
必须显式导出以使其在其他地方可见。这是一个巨大的进步
老式的 JS,每个 <script> 共享 window。
尝试一下
在下面的练习中,您将不会编写真正的 import/export 语法 - 沙箱是一个单一的
文件。相反,我们会要求您将代码组织成小的独立函数,
协作,就像每个人都在不同的文件中一样。
锻炼#js.m8.l1.e1
尝试:0加载中...
定义两个单独的函数:“square(n)”(返回 n*n)和使用 square 的“sumOfSquares(a, b)”。将 square 视为从文件“导出”并由 sumOfSquares 重用。
正在加载编辑器...
显示提示
平方和(a,b) = 平方(a) + 平方(b)
3 次尝试后可用的解决方案
复习练习
锻炼#js.m8.l1.e2
尝试:0加载中...
定义 `isEven(n)` (如果 n 为偶数则为 true)和 `countEven(arr)`,使用 isEven 来计算数组中的偶数元素。将它们保留为两个独立的函数。
正在加载编辑器...
显示提示
arr.filter(isEven).length
3 次尝试后可用的解决方案