03. Import
Импорт-выражение позволяет подключить в текущий модуль определения, экспортируемые из другого модуля:
Импорт выражение должно быть top-level
Импорты должны быть compile-time resolved
Нельзя делать условные импорты и т.д.
Определения, сделанные при помощи импортов, поднимаются как
var
-определения.
import
-expression
import
-expressionИмпорт выполняется при помощи ключевого слова import
, после чего идет import
- выражение (объявления), далее ключевое слово from
и указывается относительный/абсолютный или URL-путь к модулю.
ES6 provides several styles of importing:
Default import:
Namespace import: imports the module as an object (with one property per named export).
Named imports:
You can rename named imports:
Empty import: only loads the module, doesn’t import anything. The first such import in a program executes the body of the module.
There are only two ways to combine these styles and the order in which they appear is fixed; the default export always comes first.
Combining a default import with a namespace import.
Combining a default import with named imports.
Результатом import-выражения является объявление в текущем пространстве имен определений (bindings) из других модулей. При импорте не выполняется копирование значений из других модулей. Фактически, семантика импорта соответствует определению новой переменной и пере-присваиванию.
Синтаксис named imports похож на деструкцию, но технически ей не является. Нельзя использовать паттерны деструкции в импорте.
Imports view on exports
Импортированные значения являются read-only представлениями экспортируемых сущностей. Другими словами, любой импорт -- это живое соединение с экспортируемыми элементами.
Импорты вида
import x from 'foo'
работают аналогичноconst
Импорты вида
import * as foo from 'foo'
работают аналогично замороженным объектам.Можно модифицировать состояние подключенного модуля используя замыкания и другие приемы:
Если значение внутри модуля поменялось, то его увидят и клиенты этого модуля. Нельзя изменить импортируемое значение, но можно изменить его содержимое, если это объект??
Last updated
Was this helpful?