Page 73 - 6105
P. 73
return x * pow (x, n - 1);
} Else {
return x;
}
}
alert (pow (2, 3)); // (*)
pow (2, 3)
Запускається функція pow, з аргументами x = 2, n = 3. Ці змінні
зберігаються в контексті виконання:
Контекст: {x: 2, n: 3, рядок 1}
Виконання в цьому контексті триває, поки не зустріне вкладений виклик в
рядку 3.
pow (2, 2)
У рядку 3 відбувається вкладений виклик pow з аргументами x = 2, n = 2.
Поточний контекст зберігається в стеку, а для вкладеного виклику створюється
новий контекст
Контекст: {x: 2, n: 3, рядок 3}
Контекст: {x: 2, n: 2, рядок 1}
Звернемо увагу, що контекст включає в себе не тільки змінні, але і місце в
коді, так що коли вкладений виклик завершиться – можна буде легко повернутися
назад. Слово «рядок» тут умовне, насправді, звичайно, мається на увазі більш
точне місце в ланцюжку команд.
pow (2, 1)
Знову вкладений виклик в рядку 3, на цей раз з аргументами x = 2, n = 1.
Створюється новий поточний контекст, а попередній додається в стек:
Контекст: {x: 2, n: 3, рядок 3}
Контекст: {x: 2, n: 2, рядок 3}
Контекст: {x: 2, n: 1, рядок 1}
72