Tengo dos funciones simples aquí. En la función de loop , he definido facky como uno en la parte superior de la función. Dos cosas que no entiendo:
console.log(loop(5)) es 120 cuando facky se define en la parte superior del loopvar facky = 1; dentro del ciclo while, la respuesta es 2. Entiendo por qué esto es dos. Lo que no entiendo es por qué el comportamiento es diferente cuando la variable está afuera. function loop(size) { while (size > 1) { var facky = 1; facky = facky * size; size = size - 1; } clunk(facky); } function clunk(times) { var num = times; while (num > 0) { console.log("clunk"); num = num - 1; } } loop(5);En su ciclo while, cada vez que el ciclo itera, facky se restablece a 1, por lo que solo se imprimirá dos veces porque la última iteración del ciclo while multiplica facky por 2.
Cuando mueve la declaración fuera del ciclo while, facky no se reinicia después de cada iteración y toma el valor de 5! , o 120 después de la iteración final.
No debe declarar una variable dentro de un ciclo. Prueba esto en su lugar:
function loop(size) { var facky = 1; while (size > 1) { facky = facky * size; size = size - 1; } clunk(facky); }Realmente no importa dónde declares la var facky , siempre tiene un alcance de función.
Lo que importa es si reinicia facky = 1 en cada iteración de su ciclo, o si solo lo inicializa una vez antes del ciclo.