我正在尝试理解一些代码:
(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(window) 时,我可以看到:
Window 对象的属性 myModule 等于导出对象。 myModule 和 {myProperty: "azerty"} 之间的关系是如何解决的? 我无法理解这部分。
最佳答案
你的#3 是错误的。原代码中的括号是这样的:
(this.myModule=this.myModule || {})
它的评估如下:
this.myModule = (this.myModule || {})
如果创建了一个新的空对象,它会立即分配给 this.module
,然后通过函数参数分配给 exports
。因此,window.myModule
和 exports
都是对同一对象的引用。
关于javascript - IIFE、模块和 JS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50825726/