IIFE, модули и JS - PullRequest
       51

IIFE, модули и JS

0 голосов
/ 12 июня 2018

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

(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 (окно), я вижу, что:

enter image description here

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

1 Ответ

0 голосов
/ 13 июня 2018

Ваш # 3 не прав.Скобки в исходном коде выглядят следующим образом:

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

и оценивается следующим образом:

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

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

...