Почему после «c=a» внутри функции перестало работать «c++» снаружи?

Вот код. По задумке, должно выдавать 0,1,2,3,0,1,2,3
А выдает 0,1,2,3,0,0,0
Почему после "c=a" внутри функции перестало работать "c++" снаружи? Голову сломал.
Спасибо.
alg(0,3,c++);
alg(0,3,c++);
alg(0,3,c++);
alg(0,3,c++);
alg(0,3,c++);
alg(0,3,c++);
function alg(a,b,c){
if(a+c>b) c=a;
console.log(c);
return c;
}
  • Вопрос задан
  • 304 просмотра
Решения вопроса 1
alvvi
@alvvi
export default apathy;
А где внешняя c то?
var c = 0;
alg(0,3,c++);
alg(0,3,c++);
alg(0,3,c++);
alg(0,3,c++);
alg(0,3,c++);
alg(0,3,c++);
function alg(a,b,c){
if(a+c>b) c=a;
console.log(c);
return c;
}

c - аргумент и c внешняя перменная - это две разных переменных, когда вы выполнили присваивание c=a, оно произошло именно с аргументом внутри функции на том вызове, а не с внешней переменной с, которая продолжает расти, следовательно услвоие (a+c>b) выполняется, и на каждом последующем вызове происходит присваивание c=a, где a = 0.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
переменная c не определена

добавьте в начале кода
var c = 0;
Ответ написан
Комментировать
Ст. Ку., Не знаю для каких Вам целей нужно, вот таким образом решил, где
setTimeout(go, 100); 100 - это каждые 100милисек. генерация нового числа
var i = 15; у Вас там последовательности были 0,1,2,3 - 0,1,2,3 .... и т.д. умножаете свою последовательность 4(числа) * на кол-во таких последовательностей минус(1) и радуйтесь)
var i = 15;
var acc = 0;
var timerId = setTimeout(function go() {
        
        console.log(acc);
        if (i > 0)
        {
            acc++;
            if(acc > 3 ){ acc = 0; }
            //console.log(acc);
            setTimeout(go, 100);
        };
        i--;
      }, 100);
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы