IIFE, модули и JS

Я пытаюсь понять некоторый код:

(function (exports) {

 exports.myProperty = "azerty";

 console.log(exports)

}((this.myModule = this.myModule || {})));

Что я понял из этого кода:

1) Я выполняю IIFE, и "this" представляет Window (глобальный объект).

2) Поскольку Window не имеет свойства myModule, this.myModule = this.myModule добавляет новое свойство к объекту Window, и это свойство не определено.

3) (this.myModule = this.myModule) || {} возвращает {}, поэтому экспорт равен {} (пустой объект)

4) Я добавляю свойство "myProperty" для экспорта объекта, поэтому export = {myProerty: "azerty"}

Что я не понимаю: после выполнения этого кода, когда я вижу console.log(окно), я вижу, что:

введите описание изображения здесь

У оконного объекта есть свойство myModule, равное объекту экспорта. Как была решена связь между myModule и {myProperty: "azerty"}? Я не могу понять эту часть.

1 ответ

Ваш № 3 не так. Скобки в исходном коде выглядят так:

(this.myModule=this.myModule || {})

и это оценивается так:

this.myModule = (this.myModule || {})

Если создается новый пустой объект, он назначается this.module сразу, прежде чем быть назначенным на exports через аргумент функции. таким образом window.myModule а также exports обе ссылки на один и тот же объект.

Другие вопросы по тегам