Перейти к основному содержимому
Модуль 8 · Урок 1 из 429/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) и «sumOfSquares(a, b)», которая использует квадрат. Думайте о квадрате как о «экспортированном» из файла и повторно используемом sumOfSquares.

Загрузка редактора…
Показать подсказку

sumOfSquares(a,b) = квадрат(a) + квадрат(b)

Решение доступно после 3 попыток

Обзор упражнения

Упражнение#js.m8.l1.e2
Попыток: 0Загрузка…

Определите `isEven(n)` (истина, если n четное) и `countEven(arr)`, который использует isEven для подсчета четных элементов в массиве. Сохраняйте их как две отдельные функции.

Загрузка редактора…
Показать подсказку

arr.filter(isEven).длина

Решение доступно после 3 попыток