Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   вопрос по тесту js (https://javascript.ru/forum/misc/74911-vopros-po-testu-js.html)

osminooge21 15.08.2018 21:54

вопрос по тесту js
 
не могу понять почему выводит 10 раз по 10????? разве не должно получаться 0 -9?


for(var i=0; i<10; i++) {
setTimeout(function() {
alert(i);
}, 100);
}

Strongman 15.08.2018 22:20

Загнал этот код на jsfiddle.net и компилятор сразу же подчеркнул слово function - функция внутри цикла во внешнем scope может привести к нарушению семантики, конфликтам и непредсказуемым последствиям. - Может быть из-за этого?

рони 15.08.2018 22:54

osminooge21,
Почему это не работает?

ksa 17.08.2018 14:59

Цитата:

Сообщение от osminooge21
разве не должно получаться 0 -9?

Нет. :no:
На момент срабатывания таймера переменная i имеет значение 10.
Его-то и будут выводить те таймеры.

function test() {
	alert(++test.cnt);
	if (test.cnt<10) {
		setTimeout(test,100);
	};
};
test.cnt=0;
setTimeout(test,1000);

SuperZen 17.08.2018 15:20

надо вместо var использовать let
или использовать IIFE


Часовой пояс GMT +3, время: 23:37.