en javascript, ¿por qué podemos usar variables que no han sido declaradas (es decir, const, let, var) en el ciclo for? código de ejemplo a continuación:
function testFunc(items) { for (item of items) { console.log(item) } }Esperaría que el código anterior se equivoque. ¿No necesitamos declarar la variable con una de las palabras clave const , let y var ? Ejemplo a continuación:
function testFunc(items) { for (const item of items) { console.log(item) } }En modo no estricto, no arrojará un error. Simplemente creará un item de variable global para la ventana:
function testFunc(items) { for (item of items) { console.log(item) } } testFunc([1,2,3]) console.log(window.item) //property created in the window object console.log(item) //global variable Aunque no puede obtener el valor del item antes de que se asigne (ReferenceError), si tiene una asignación como item=1 en modo no estricto, creará una variable (alcance global) si aún no está definida. El bucle for en este caso es item=1 , item=2 , item=3 . Por lo tanto, se permite obtener el valor del item (como en console.log(item) ).
Y como puede ver en la salida, el valor del item después del bucle es 3 .
Pero si solo agrega una declaración de "uso estricto", arroja un error
"use strict" function testFunc(items) { for (item of items) { console.log(item) } } testFunc([1,2,3]) //throws ReferenceError