Page 77 - 6105
P. 77

function f (n) {
                        return n? n * f (n - 1): 1;


                      };
                      var g = f;

                      f = null;

                      alert  (g  (5));  //  запуск  функції  з  новим  ім'ям  -

               помилка при виконанні!

                      Помилка  виникла  тому  що  функція  зі  свого  коду  звертається  до  свого

               старого імені f. А цієї функції вже немає, f = null. Для того, щоб функція завжди

               надійно працювала, її можна оголосити як Named Function Expression:

                       var f = function factorial (n) {

                        return n? n * factorial (n-1): 1;

                      };

                      var g = f; // посилання для підтвердження на функцію-

               факторіал в g

                      f = null;

                      alert (g (5)); // 120, працює!

                      У браузері IE8- створюються дві функції. В браузері IE до 9 версії ім'я NFE

               видно всюди, що є помилкою з точки зору стандарту. Але насправді ситуація ще

               цікавіша. Старий IE створює в таких випадках цілих дві функції: одна записується

               в змінну f, а друга – в змінну factorial.

                       var f = function factorial (n) {/*...*/};

                      // в IE8- false

                      // в інших браузерах помилка, тому що ім'я factorial не

               видно

                      alert (f === factorial);

                      Всі інші браузери повністю підтримують іменовані функціональні вирази.





                                                                76
   72   73   74   75   76   77   78   79   80   81   82