晚上已经很晚了,所以我可能运行得不好,但是我找到了这段代码,我似乎无法弄明白为什么为什么这样使用(注意:我理解它的作用,我不明白的是它背后的含义。)
(function() {
var narcissus = {
options: {
version: 185,
},
hostGlobal: this
};
Narcissus = narcissus;
})();
自执行匿名函数用于避免污染全局命名空间,但此代码不需要引入除Narcissus
之外的其他变量,因此可以很容易地将其重写为Narcissus = {...};
。我能想到的一些可能的原因是代码或实现缺陷的面向未来。有没有我看不到的东西?
答案 0 :(得分:1)
从可维护性的角度来看,它允许作者稍后在Closure范围中添加代码,该范围不会在narcissus
的创建和Narcissus
的分配之间泄露。虽然在这种情况下没有任何代码,所以除了上面提到的this
之外,我没有看到任何收益。
答案 1 :(得分:0)
您遗漏的部分是javascript是区分大小写的语言,所以
Narcissus != narcissus;
他正在通过省略Narcissus
关键字将var
添加到全局范围,或者Narcissus已在全局范围内可用,或Narcissus
已在此范围内定义正在调用函数。
然后将其定义为匿名函数内的对象narcissus
。
我无法告诉你为什么他这样做,但看起来他可能已经在this
引用一个对象的范围内,并且他想要将键hostGlobal
设置为全局对象不是当前作用域的对象。
这就是为什么他将它作为匿名函数运行,因为它们是在全局范围而不是函数范围内执行的。所以在他的代码中hostGlobal: this
指的是全局对象。
当然他可以使用hostGlobal: window
,除非此代码也在非浏览器环境中运行,例如node.js,其中全局对象为global
而不是window
。所以他可能会把它作为一种非常不直观的实现方法。
hostGlobal: ( global === undefined )? window : global
希望这有帮助