Page 75 - 6105
P. 75

Вимоги  до  пам'яті.  Рекурсія  призводить  до  зберігання  всіх  даних  для

               незакінчених зовнішніх викликів в стеку, в даному випадку це призводить до того,


               що  піднесення  до  степеня  n  зберігає  в  пам'яті  n  різних  контекстів.  Реалізація
               піднесення до степеня через цикл набагато більш економна:


                      function pow (x, n) {

                        var result = x;

                        for (var i = 1; i <n; i ++) {
                          result * = x;


                        }
                        return result;

                      }

                      У  такої  функції  pow  буде  один  контекст,  в  якому  будуть  послідовно

               змінюватися значення i і result.

                      Будь-яка  рекурсія  може  бути  перероблена  в  цикл.  Як  правило,  варіант  з

               циклом  буде  ефективніше.  Але  переробка  рекурсії  в  цикл  може  бути

               нетривіальною, особливо коли в функції, в залежності від умов, використовуються

               різні рекурсивні підвиклики, коли розгалуження більш складне.




                      6.3. Іменовані функціональні вирази
                      Спеціально для роботи з рекурсією в JavaScript існує особливе розширення


               функціональних  виразів,  яке  називається  «Named  Function  Expression»
               (скорочено NFE).


                      Звичайний функціональний вираз:

                      var f = function (...) {/ * Тіло функції * /};

                      Іменований фкнкціональний вираз з іменем sayHi:

                      var f = function sayHi (...) {/ * Тіло функції * /};








                                                                74
   70   71   72   73   74   75   76   77   78   79   80