Модули Javascript

У меня есть следующий код. Это модуль 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

Ответ 1

Вы можете немного сломать его, например:

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

Что он делает, это глобальная область (обычно window, но не всегда). Затем он создает ссылку из Cahootsy в глобальную область видимости с помощью свойства object scope, а другой - через свойство scope Cahoosty.

В результате вы получите window.Cahootsy объект, а window.Cahootsy.scope вернется в окно.

Ответ 2

(function() { return this; })() - это трюк, возвращающий глобальный объект.

Этот оператор устанавливает Cahootsy.scope глобальному объекту (для использования в будущем), а также устанавливает свойство Cahootsy объекта globalobject для отображения Cahootsy во внешний мир.