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
   68   69   70   71   72   73   74   75   76   77   78