Page 72 - 6105
P. 72

Наприклад, для виклику функції pow (2, 3) з прикладу вище, буде створений

               контекст  виконання,  який  буде  зберігати  змінні  x  =  2,  n  =  3.  Позначимо  його


               схематично так:

                      Контекст: {x: 2, n: 3, рядок 1}

                      Далі функція pow починає виконуватися. Обчислюється вираз  n! = 1 - він
               дорівнює true, адже в поточному контексті n = 3. Тому задіюється перша гілка if:


                      function pow (x, n) {

                        if  (n!  =  1)  {//  поки  n!  =  1  зводити  обчислення  pow

               (x, n) до pow (x, n-1)
                          return x * pow (x, n - 1);


                        } Else {
                          return x;

                        }

                      }

                      Щоб  обчислити  вираз  x  *  pow  (x,  n-1),  потрібно  провести  запуск  pow  з

               новими аргументами. При будь-якому вкладеному виклику JavaScript запам'ятовує

               поточний контекст виконання в спеціальній внутрішній структурі даних – «стеку

               контекстів». Потім інтерпретатор приступає до виконання вкладеного виклику. В

               даному випадку викликається та ж pow, проте це абсолютно неважливо. Для будь-

               яких функцій процес однаковий.

                      Для  нового  виклику  створюється  свій  контекст  виконання,  і  управління

               переходить в нього, а коли він завершений – старий контекст дістається зі стека і

               виконання зовнішньої функції поновлюється.

                      Розберемо,  що  відбувається  з  контекстами  більш  детально,  починаючи  з


               виклику (*):

                      function pow (x, n) {

                        if  (n!  =  1)  {//  поки  n!  =  1  зводити  обчислення  pow
               (.. n) до pow (.. n-1)



                                                                71
   67   68   69   70   71   72   73   74   75   76   77