Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Почему 6 раз срабатывает 6 строка ? (https://javascript.ru/forum/misc/81715-pochemu-6-raz-srabatyvaet-6-stroka.html)

Ganjabuss 16.01.2021 22:04

Почему 6 раз срабатывает 6 строка ?
 
Вложений: 2
Приветствую уважаемые гуру
Помогите постичь дзен
Такой код если запускать локально выводит дичь (см. ниже)
В местной песочнице отрабатывает как надо.
Собственно вопрос. Почему 6 раз выполняется "6 ? 6"
Пробовал в Opera 72 & FireFox 84 (Win10)

var Flag = 0;

Tick();

function Tick(){
    Flag += 1;
    console.log("Flag " + Flag );
     if ( Flag === 1 ) { console.log("1 ? " + Flag); Add1(); }
     if ( Flag === 2 ) { console.log("2 ? " + Flag); Add2(); }
     if ( Flag === 3 ) { console.log("3 ? " + Flag); Add3(); }      
     if ( Flag === 4 ) { console.log("4 ? " + Flag); Add4(); }  
     if ( Flag === 5 ) { console.log("5 ? " + Flag); Add5(); }
     if ( Flag === 6 ) { console.log("6 ? " + Flag); }
}
 
function Add1(){ Tick(); }
function Add2(){ Tick(); }
function Add3(){ Tick(); }
function Add4(){ Tick(); }
function Add5(){ Tick(); }



Вывод в консоль:

> Flag 1
> 1 ? 1
> Flag 2
> 2 ? 2
> Flag 3
> 3 ? 3
> Flag 4
> 4 ? 4
> Flag 5
> 5 ? 5
> Flag 6
> 6 ? 6
> 6 ? 6
> 6 ? 6
> 6 ? 6
> 6 ? 6
> 6 ? 6

Aetae 16.01.2021 22:45

Потому что исполнение последовательное, флаг глобальный, и использованы if вместо if-else.
После вызова AddN() исполнение не останавливается. Функция вызывет себя рекурсивно, после чего продолжает исполнение проверяя следующий if. И так 6 раз.

рони 16.01.2021 22:50

Цитата:

Сообщение от Ganjabuss
Почему 6 раз выполняется "6 ? 6"

потому что 6 раз была запущена функция Tick.
Tick -> Add1 -> Add2 -> Add3 -> Add4 -> Add5
Tick вызвал консоль при флаге 1 и 6
Add1 вызвал консоль при флаге 2 и 6
...
Add4 вызвал консоль при флаге 5 и 6
Add5 вызвал консоль при флаге 6

Ganjabuss 16.01.2021 23:06

О .....
Спасибо большое !
Осознал ! =))


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