this в модуле nodejs

Кто-нибудь может объяснить или дать ссылку на объяснение почему в файле в файле модуля this возвращает {} тогда как внутри любой функции this возвращает объект global?

Чуть подробнее: В консоли, например, все в целом понятно, мы находимся в среде но не внутри какого-либо модуля

> this
<ref *1> Object [global] {
  global: [Circular *1],
  clearInterval: [Function: clearInterval],
  clearTimeout: [Function: clearTimeout],
  setInterval: [Function: setInterval],
  setTimeout: [Function: setTimeout] {
    [Symbol(nodejs.util.promisify.custom)]: [Function (anonymous)]
  },
  queueMicrotask: [Function: queueMicrotask],
  clearImmediate: [Function: clearImmediate],
  setImmediate: [Function: setImmediate] {
    [Symbol(nodejs.util.promisify.custom)]: [Function (anonymous)]
  }
}

однако внутри модуля когда я создаю вот такой файл например:

function context() {
  console.log(this);
}

console.log(this);
context();

вывод получается вот такой:

{}
<ref *1> Object [global] {
  global: [Circular *1],
  clearInterval: [Function: clearInterval],
  clearTimeout: [Function: clearTimeout],
  setInterval: [Function: setInterval],
  setTimeout: [Function: setTimeout] {
    [Symbol(nodejs.util.promisify.custom)]: [Function (anonymous)]
  },
  queueMicrotask: [Function: queueMicrotask],
  clearImmediate: [Function: clearImmediate],
  setImmediate: [Function: setImmediate] {
    [Symbol(nodejs.util.promisify.custom)]: [Function (anonymous)]
  }
}

то бишь пустой объект для this в модуле и объект global для this в функции Кто-нибудь знает почему это так и где в доке NodeJS это описано?


Ответы (1 шт):

Автор решения: Alexey Ten

По историческим причинам в модуле this === module.exports. Но пользоваться этим не рекомендуется.

https://nodejs.org/api/deprecations.html#deprecations_dep0092_top_level_this_bound_to_module_exports

→ Ссылка