Сообщение от danik.js
|
Пошагово, это вот так:
Видим значения переменных, стек вызовов (можем по ним ходить) выполняем код по строчке.
|
Благодарю за ответ.
Вопросы:
1. Что именно Вы имели ввиду, под "это чтобы показать что глобальные переменные отслеживать неудобно и за них следует отрывать руки"?
Разве у меня там, где-то, была глобальная переменная?
2. Зачем переменная g = 0 ?
3. Я правильно понимаю, что необходимо ставить точку останова и только после этого, будет доступна возможность выполнять в конкретном месте код пошагово?
4.
function sumTo(n)
{
console.log("bla 1 относится к " + n);
if (n == 1) return n;
console.log("bla 2 относится к " + n);
res=sumTo(n-1) + sumTo(n-1);
console.log("bla 3 относится к " + n);
return res;
}
document.write( sumTo(2) );
Начинаю прокручивать в инструментах разработчика в google chrome:
console.log("bla 1 относится к " + n);
if (n == 1) return n;
console.log("bla 2 относится к " + n);
res=sumTo(n-1) + sumTo(n-1);
далее
console.log("bla 1 относится к " + n);
if (n == 1) return n; (ДВА РАЗА)
затем одна из рекурсий завершает свое выполнение и
получается вторая единица
console.log("bla 1 относится к " + n);
if (n == 1) return n; (ДВА РАЗА)
затем рекурсия прекращает свою работу НО!
когда щелкаю на next function call он еще "перескакивает" на строчку
res=sumTo(n-1) + sumTo(n-1);
и только потом доходит до bla 3.
это завершает свое выполнение основной вызов первый, но почему он переходит на эту строчку (
res=sumTo(n-1) + sumTo(n-1);
) ничего не делая? ведь он должен был ее "пройти" когда инициализировал вызов рекурсий.
5. Я правильно понимаю, что даже если бы функция на была вызвана в теле документа (document.write( sumTo(2) )
, она все равно бы посчиталась (использовала бы память)?