IIFE,模块和JS

时间:2018-06-12 20:56:29

标签: javascript ecmascript-5 iife

我试图理解一些代码:

(function (exports) {

 exports.myProperty = "azerty";

 console.log(exports)

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

我从这段代码中理解的是:

1)我正在执行IIFE和"这个"表示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等于exports对象。 myModule和{myProperty:" azerty"}之间的关系如何解决? 我无法理解这一部分。

1 个答案:

答案 0 :(得分:1)

你的#3错了。原始代码中的括号如下:

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

并按照以下方式进行评估:

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

如果创建了一个新的空对象,则会在通过函数参数分配给this.module之前立即将其分配给exports。因此window.myModuleexports都是对同一对象的引用。