我有以下代码。这是一个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;

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

最佳答案

您可以将其分解,如下所示:

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

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

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

关于Javascript模块,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13665722/

10-11 05:47