Почему return не останавливает выполнение кода?
Мне не понятно почему после директивы return код продолжает выполняться. То есть при нажатии кнопки, функция запускается, в ней переменная увеличивается на 1, увеличение прекращается, когда a становится больше 5, идет выход из функции. Однако, на этом все не заканчивается, после return почему-то срабатывает console.log.
let a = 1;
const button = document.querySelector('button');
function func() {
a++;
//console.log(a); //2, 3, 4, 5, 6
if (a > 5) return 5; //прекратилось на 6
func();
console.log(a);
}
button.onclick = func;
<button>Button</button>
Также почему-то эта функция не делает возврат значения.
let a = 1;
const button = document.querySelector('button');
function func() {
a++;
//console.log(a); //2, 3, 4, 5, 6
if (a > 5) return 5; //прекратилось на 6
func();
console.log(a);
}
button.onclick = func;
console.log(func() + 1); //5 + 1 = 6 -- не выводится
<button>Button</button>
P. S. Хотя нет, return все-таки прерывает функцию, иначе было бы переполнение стека. Получается, что все эти 6-ки это выход из функции?
Ответы (1 шт):
Все просто у вас рекурсия. И console.log вызывается у родительского вызова.
Протрасируйте по шагам вы увидите что после return функция выйдет из func() внутреннего и выполнит инструкцию далее.
let a = 1;
const button = document.querySelector('button');
function func() {
a++;
//console.log(a); //2, 3, 4, 5, 6
if (a > 5) return 5; //прекратилось на 6
console.log('вызов до ' + a)
func();
console.log('вызов после ' +a);
}
button.onclick = func;
console.log(func() + 1); //5 + 1 = 6 -- не выводится
<button>Button</button>
А я так понимаю что вы хотели бы так. Только вы забыли про return.
let a = 1;
const button = document.querySelector('button');
function func() {
a++;
//console.log(a); //2, 3, 4, 5, 6
if (a > 5) return 5; //прекратилось на 6
return func();
}
button.onclick = func;
console.log(func() + 1); //5 + 1 = 6 -- не выводится
<button>Button</button>