Почему я получаю значение «результат» для этого замыкания?

Допустим, у меня есть этот код (играть на скрипке) предназначен для запоминания модулей:

var chat = {
 // Create this closure to contain the cached modules
 module: function() {
    // Internal module cache.
    var modules = {};
     console.log('in module:', name);  // <---------- "in return: result"     
    // Create a new module reference scaffold or load an
    // existing module.
    return function(name) {
      console.log('in return:', name); // <---------- "in return: derp"
      // If this module has already been created, return it.
      if (modules[name]) {
        return modules[name];
      }

      // Create a module and save it under this name
      return modules[name] = { Views: {} };
    };
  }()
};

chat.module("derp");

Нигде в коде нет фразы «результат» даже упомянул. Почему он возвращает это значение в первом журнале консоли?

Кроме того, как функция возврата получает значение дляname параметр, когда ни один не указан вmodule: function() {} декларация?

Ответы на вопрос(3)

Ваш ответ на вопрос