Особливості Функцій у 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 такою не є.