Entiendo que var es una variable global en el nodo js y se puede acceder a ella desde cualquier lugar.
Sin embargo, estaba confundido por los siguientes ejemplos.
A continuación, se puede acceder a global_1 sin confusión, ya que es una variable global.
var global_1 =1 function2 = () => { console.log('global_1 in function2: ' + global_1) } main = () =>{ console.log('global_1 in main: ' + global_1) function2() } main()
Pero si pongo mi function2 dentro de help.js; dijo que global_1 no está definido; ¿No es que cuando importo la función auxiliar, el efecto es el mismo que el del código anterior donde pego mi función 2 en el mismo archivo?
const helper = require('./helper'); var global_1 =1 main = () =>{ console.log('global_1 in main: ' + global_1) helper.function2() } main()
En cuanto a let y const, tengo entendido que solo se puede acceder a ellas dentro de un {}
Pero ahora, function2 todavía puede acceder a global_1, aunque global_1 no está definido dentro de function2. ¿No se puede acceder solo a var en todas partes y solo se puede acceder a let, const dentro de {}?
var global_1 =1 or let global_1 =1 or const global_1 =1 function2 = () => { console.log('global_1 in function2: ' + global_1) } main = () =>{ console.log('global_1 in main: ' + global_1) function2() } main()
Entiendo que var es una variable global en el nodo js y se puede acceder a ella desde cualquier lugar.
Te equivocas.
var
dentro de una función declara una variable en el ámbito de esa función.
var
fuera de una función declara una variable en el ámbito de ese módulo.
(Hay un caso límite, que TJ señaló, donde si ejecuta el código en el contexto global (por ejemplo, node < yourModule.js
) en lugar de cargarlo como un módulo normal ( node yourModule.js
) entonces no será tratado como un módulo y var
fuera de una función creará un global).
Pero si pongo mi function2 dentro de help.js; dijo que global_1 no está definido; ¿No es que cuando importo la función auxiliar, el efecto es el mismo que el del código anterior donde pego mi función 2 en el mismo archivo?
No.
Las variables que están "dentro del alcance" están determinadas por dónde se define una función, no por dónde se llama.
En cuanto a let y const, tengo entendido que solo se puede acceder a ellas dentro de un {}
No.
No se puede acceder a ellos fuera del bloque en el que están definidos.
En su ejemplo, se definen fuera de cualquier bloque explícito, el módulo completo se trata como el bloque para estos fines.
var a = 1; function b () { var c = 2; let d = 3; if (a) { let e = 4; var f = 5; // abcde and f are available here } // abcd and f are available here // e isn't because it is block scoped and this is outside the block } // a and b are available here. // Everything else is scoped to either the function b or the block // connected to the if statement inside it