这段代码有意义吗?

时间:2011-07-30 21:35:04

标签: javascript

晚上已经很晚了,所以我可能运行得不好,但是我找到了这段代码,我似乎无法弄明白为什么为什么这样使用(注意:我理解它的作用,我不明白的是它背后的含义。)

(function() {

    var narcissus = {
        options: {
            version: 185,
        },
        hostGlobal: this
    };
    Narcissus = narcissus;
})();

自执行匿名函数用于避免污染全局命名空间,但此代码不需要引入除Narcissus之外的其他变量,因此可以很容易地将其重写为Narcissus = {...};。我能想到的一些可能的原因是代码或实现缺陷的面向未来。有没有我看不到的东西?

2 个答案:

答案 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  

希望这有帮助