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