Существует два способа объявления функций в JavaScript: декларативная и экспрессия функции.
Различия следующие:
1). Для функций, определенных методами, объявленными функцией, имя функции необходимо, в то время как имя функции выражения функции является необязательным.
2). Функции, определенные методами, объявленными функцией, могут быть вызваны до объявления функции, в то время как функции выражений функций могут быть вызваны только после объявления.
3). Функции, определенные методами, объявленными функцией, не являются реальными объявлениями. Они могут выглядеть только глобально или вложенные в другие функции, но они не могут появиться в петлях, условиях или попытках/поймать/наконец, и
Функциональные выражения могут быть объявлены в любом месте.
Ниже приведены два метода определения функции:
Кода -копия выглядит следующим образом:
// Функциональная декларативная формула
функция Greeting () {
console.log ("Hello World");
}
// Функция выражения
var Greeting = function () {
console.log ("Hello World");
}
Вот интересный JavaScript:
Кода -копия выглядит следующим образом:
function f () {console.log ('Я снаружи!'); }
(function () {
if (false) {
// повторить функцию f
function f () {console.log ('Я внутри!'); }
}
f ();
} ());
Что будет выходить? Первой реакцией должна быть «Я снаружи». В результате «Я внутри» выводится в Chrome, IE11 непосредственно сообщил об ошибке, а нижняя версия выходов Firefox «Я снаружи» ...
Результат выхода хрома четко отражает характеристики функций, объявленных с помощью декларативных выражений функций - функции могут быть вызваны до объявления.
Ошибка т.е. показывает, что объект отсутствует, потому что объявление функции находится в условиях, которое нарушает принцип объявления функции.
Объем выражений функции:
Если функция, объявленная экспрессией функции, имеет имя функции, то имя функции эквивалентно локальной переменной функции и может быть вызвано только внутри функции. Например, каштан:
Кода -копия выглядит следующим образом:
var f = function fact (x) {
if (x <= 1)
возврат 1;
еще
вернуть x*fact (x-1);
};
оповещение (fact ()); // uncaught referenceerror: факт не определяется
FACT () может быть вызван внутри функции, но будет сообщена ошибка при вызове вне функции: факт не определяется
Выше приведено в этой статье, надеюсь, вам понравится.