10

我有以下代码。它是一个 JavaScript 模块。

(function() {

   // Object
   var Cahootsy;

   Cahootsy = {
       hello: function () {
           alert('test');
       },
    };

    (Cahootsy.scope = (function() {
        return this;
     })()).Cahootsy = Cahootsy;

    return Cahootsy;

}).call(this);

我不明白该部分:

    (Cahootsy.scope = (function() {
        return this;
     })()).Cahootsy = Cahootsy;

我认为它正在创建一个引用“this”模块的对象,然后将 Cahootsy 变量分配给全局 Cahootsy 变量。我不明白为什么需要将“this”分配给 Cahootsy.scope

4

2 回答 2

6

你可以把它分解一下,像这样:

var getScope = function() {return this;}
Cahootsy.scope = getScope();
getScope().Cahootsy = Cahootsy;

它所做的是获取全局范围(通常window,但不总是)。然后它Cahootsy通过对象的属性创建一个到全局范围scope的链接,并通过范围的Cahoosty属性创建一个链接。

结果是,在浏览器中,您将获得window.Cahootsy对象,window.Cahootsy.scope然后返回窗口。

于 2012-12-02T02:03:23.350 回答
3

(function() { return this; })()是返回全局对象的技巧。

该语句设置Cahootsy.scope为全局对象(供将来使用),并且还设置了全局对象的属性以向外界Cahootsy公开。Cahootsy

于 2012-12-02T02:02:24.013 回答