javascript - IIFE、模块和 JS

标签 javascript ecmascript-5 iife

我正在尝试理解一些代码:

(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) 时,我可以看到:

enter image description here

Window 对象的属性 myModule 等于导出对象。 myModule 和 {myProperty: "azerty"} 之间的关系是如何解决的? 我无法理解这部分。

最佳答案

你的#3 是错误的。原代码中的括号是这样的:

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

它的评估如下:

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

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

关于javascript - IIFE、模块和 JS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50825726/

相关文章:

IIFE 内声明的 Javascript 链式变量赋值获得全局可见性?

javascript - 如何使 Immediately-Invoked-Func-Expression 在构造对象后立即访问 javascript 中先前定义的属性

Javascript JQuery 链接

javascript - 如何检查某些东西是否在 ng-class 的数组中

javascript - 如何在 JavaScript 中以字符串形式返回参数?

javascript - 为什么 **(Object.__proto__ instanceof Function)** === false?

javascript - Contenteditable:将光标移到插入的 html 节点之外(webkit/ie)

javascript - 带有背景 Chart.js 的单条

Angular 6目标es5 IE语法错误(箭头函数)

javascript - 自动执行匿名 JavaScript 函数的括号位置?