#javascript #module
#javascript #импорт #ecmascript-6
Вопрос:
Я читал ссылку на инструкцию импорта es6 в MDN. Синтаксис:
import "my-module";
будет импортировать весь модуль только для побочных эффектов, без импорта каких-либо привязок. Я не уверен, что означают побочные эффекты. Я использовал с angular, говоря import "angular"
. Angular привязывается к window, но не возвращает объект. Поэтому я не уверен, будет ли это точно называться побочным эффектом.
Ответ №1:
Когда вам нужно импортировать что-то, что ничего не экспортирует, но делает что-то еще, это модуль только для побочных эффектов. Вы импортируете его только для его инициализации.
Чистые и не чистые модули
Если вы думаете о модулях как о функциях, модуль, который влияет на область видимости только путем экспорта своего содержимого, подобен функции, которая всегда возвращает одно и то же (чистая функция без параметров). Независимо от того, сколько раз вы будете импортировать react 15.01, вы всегда будете получать объект, содержащий одни и те же методы.
Модуль с побочными эффектами — это модуль, который изменяет область действия другими способами, а затем возвращает что-то, и его эффекты не всегда предсказуемы и могут быть затронуты внешними силами (не чистой функцией). Например, полизаполнение может ничего не делать, поскольку обнаруживает, что функция, которую оно включает, уже поддерживается браузером.
Примеры побочных эффектов:
- Angular привязывается к глобальному
window
объекту, но ничего не экспортирует. - Полизаполнение, которое включает функции ES6 в браузерах, которые их не поддерживают, например, полизаполнение babel, является побочным эффектом.
- Многие плагины jQuery подключаются к глобальному объекту jQuery.
- Модули аналитики, которые работают в фоновом режиме, отслеживают взаимодействие с пользователем и отправляют данные на сервер.
- Импорт CSS в webpack можно считать побочным эффектом, если вы не используете модули CSS.
Ответ №2:
Вот пример:
//a.js
export function print1()
{
console.log("export print1 is working");
}
function print2()
{
console.log("non-export print2 is working");
}
print1();
print2();
//b.js
import "a.js";
Когда вы запустите «b.js», вы увидите печатные сообщения, которые вызываются side effects
.
Ответ №3:
Рассмотрим приведенный ниже пример кода. когда вы пытаетесь что-то импортировать, он ничего не экспортирует, но выполняет множество действий и переопределяет существующий код (если он у вас есть), так что это побочный эффект.
import Ember from 'ember';
Ember.RSVP.configure('onerror', function(error) {
....
});
app.js:
import './overrides/extra';