Ejemplo 1. Tengo un archivo test.js
const lib = { foo: () => console.log(a) }; lib.foo(); // can't access "a" before init const a = 3;Ejemplo 2. Tengo dos archivos: test1.js y test2.js
const lib = require('./test2'); lib.foo(); // 3 const lib = { foo: () => console.log(a) }; const a = 3; module.exports = lib;Por la misma razón esto es válido:
const lib = { foo: () => console.log(a) }; const a = 3; lib.foo(); a existe antes de la exportación, por lo que existe cuando se llama.
en el primer caso, está accediendo al valor de "a" incluso antes de asignar el valor de "a",
en el segundo caso, se declara y luego se usa, por lo que el segundo caso funciona bien y el primer caso da error