Zmienna let w pętli for

0
for(let i =0; i <3; ++i){
    setTimeout(() => console.log(i), 0);
}

jeśli używamy for w pętli to co się tak naprawdę dzieje?
tworzy się nowa zmienna i? z wartością z poprzedniej iteracji? skoro wynik wykonania powyżej jest poprawany.

1

Pętla for to tak naprawdę skrótowiec dla

let  i = 0; //inicjalizacja
while(i<10){//warunek
....
i++; //zmiana
}

Pisanie tylu lini dla tak często powatrząjacej sie czynności było by katorgą, wiec for zamyka to w sobie jako
for(<inicjalizacja> ; <warunek> ; <zmiana>). Miedzy <> można wpisać każde wyrażenie jakie da się zapisać bez grupujących klamerek(choć pewnie to nie do końca prawda). Jak łatwo sie domyślić, cześć przed pierwszym średnikiem wykonywana jest tylko raz, przed wykonaniem pętli, warunek sprawdzany jest na początku pętli, a zmienia wartości następuje na samym końcu.

Dość ważne jest to żeby używać w for let zamiast var. let zyją miedzy klamerkami jak w normalnych jezykach, natomiast wszystkie vary są przenoszone na góre funkcji i można dostać kolizje przez to.

0

jeśli używamy for w pętli to co się tak naprawdę dzieje?

Masz na myśli: "let w pętli"?


tworzy się nowa zmienna i?

Według tego artykułu MDN w podanym przez Ciebie kodzie tworzy się nowa zmienna i. Cytat (pogrubienie moje):

for ([initialization]; [condition]; [final-expression])
statement

> `initialization`
>   An expression (including assignment expressions) or variable declaration evaluated once before the loop begins. Typically used to initialize a counter variable. **This expression may optionally declare new variables with var or let keywords.** Variables declared with var are not local to the loop, i.e. they are in the same scope the for loop is in. Variables declared with let are local to the statement.

---

> z wartością z poprzedniej iteracji?

W podanym przez Ciebie kodzie zmienna `i` nie ma wartości z poprzedniej iteracji ani w momencie utworzenia, ani w żadnej iteracji pętli. Otrzymuje ona **na koniec** każdej iteracji nową wartość. [MDN pisze o tym tak](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for):

> ```
for ([initialization]; [condition]; [final-expression])
statement

final-expression
An expression to be evaluated at the end of each loop iteration. This occurs before the next evaluation of condition. Generally used to update or increment the counter variable.


skoro wynik wykonania powyżej jest poprawany.

Co to znaczy "poprawny" według Ciebie w tym kodzie?

0

no właśnie się zastanwiałem jaka jest różnica między var a let. Co się dzieje. Jeśli używamy var to bodajże js używa tej samej zmienej jeśli się nie mylę.

1 użytkowników online, w tym zalogowanych: 0, gości: 1