По суті функції називають блоки, які потім можна викликати:
Розглянемо ще відмінності між declaration і expression:
При розгляді коду вище можна припустити, що Function declaration матиме однакове значення, так як цей тип функції виповнюється до виконання програми. Однак, друга функція є частиною виразу присвоювання. Щоб зробити ситуацію ще більш заплутаною розглянемо такий приклад:
Тут функції виконуються в залежності від умови. Логічно було б припустити, що, так як в умови true, то функція sayHey () виведе значення "hey". але відбувається все навпаки. Але функція sayHo навпаки виводить значення "ho", тобто виповнюється в умови if (true). Опть ж, різниця в часі виконання функцій. Function Declaration (sayHey) перезаписує себе в блоці else, так як розбирається ще до виконання програми. Функція sayHo є function expression і розбирається безпосередньо в ході виконання програми. Тому вона спрацьовує в першому блоку if. З цього прикладу випливає, що якщо вам необхідно виконувати функцію в залежності від умов, то в цьому випадку треба використовувати function expression. Комі того, не варто ніколи оголошувати function declaration в умовних конструкціях!
Налагодження функцій.
Nameless Function Expressions (безіменні функціональниe вираження) при налагодженні не дають ніякої корисної иформации, тобто повністю "анонімні". Іменування функціонального вираження дозволяє отримати контроль при налагодженні: