Особливості Функцій у JavaScript
Функція – це значення
Розглянемо простий приклад:
Код: function foo() var x = "hello"; > document.write(foo); //покаже код функції
Код: function foo() var x = "hello "; document.write(x); >
var myfunc = foo; // Надає посилання на ту саму функцію
myfunc(); //виводить "hello" foo(); //робить те саме
Так як при визначенні функції автоматично створюється змінна, то, якщо в програмі оголосити змінну з таким же ім'ям і привласнити їй якесь значення, то жодної нової змінної не буде створено, в цьому випадку вже існуючою змінною буде присвоєно нове значення:
Код: // Інтерпретатор автоматично створює змінну з ім'ям foo function foo() <>
// Теж саме, як і foo = 3, т. е. змінної foo просто надається нове значение var foo = 3;
Анонімна функція
Функція-вираз визначається за допомогою ключового слова function, за яким вказуються такі компоненти:
- Необов'язковий ідентифікатор, який визначає назву функції. Це згодом може бути використане для виклику всередині функції самої себе.
- Пара круглих дужок навколо списку з нуля або більше параметрів, що розділяються комами.
- Тіло функції, що складається з пари фігурних дужок, всередині яких розташовуються інструкції.
Синтаксис функції-вираження виглядає так:
Код: var f = function необов'язкове_ім'я(параметри) // тіло функції >;
Простий приклад функції-вираження:
Функція, що визначається як функція-вираз, у специфікації мови, називається «Function Expression » (скорочено FE).
На відміну від FD, визначення FE не піднімаються нагору, тому їх не можнавикликати до того моменту, поки інтерпретатор не досяг рядка з визначенням функції:
Код: sayName("Петро"); // Буде помилка
var sayName = function(name) alert( "Мене звуть" + name ); >;
FE на відміну від FD, можна визначати в if, тому що FE створюється тільки в той момент, коли інтерпретатор досягає рядка з функцією:
Чому Function Declaration не працює в if? Відповідь досить проста, тому що if може містити тільки інструкції, а FD такою не є.