Функциональное объявление
функция foo () {}Функция Foo будет поднята до выполнения всей программы, поэтому она доступна во всей области (сфера действия), которая определяет функцию Foo. Даже вызов его до того, как определение функции в порядке.
foo (); // работает, потому что Foo был создан до того, как этот код работает foo () {}Поскольку я планирую написать статью, специально представляющую область, я не буду подробно объяснить ее здесь.
Функциональные выражения
Для объявлений функции необходимо имя функции, но для выражений функций это необязательно. Следовательно, появляются выражения анонимной функции и выражения именных функций. следующее:
Объявление функции: функция functionName () {}
Объявление функции: functionName [необязательно] () {}
Тогда я знаю, что если нет имени функции, это должно быть выражение функции, но как мы должны судить, есть ли имя функции?
JavaScript указывает, что если весь корпус функции является частью выражения, то это выражение функции, в противном случае это объявление функции. Ниже приведено выражение:
var fuc = foo () {}Давайте приведем еще несколько экстремальных примеров выражения:
! function foo () {} true && function foo () {}Вышеуказанные утверждения просто для того, чтобы различать выражения функции, и они, как правило, не написаны так. Затем используйте пример сравнения, чтобы увидеть эффект:
foo1 (); // foo1 не определяется foo2 (); // работает, потому что Foo2 был создан до того, как этот код запускается! Function foo1 () {alert ('foo1 работает');}; function foo2 () {alert ('foo2 работает');};Экспрессии анонимных функций
var foo = function () {};Приведенный выше пример присваивает анонимную функцию переменной Foo.
foo; // 'undefined'foo (); // это повышает тип иррорварвар foo = function () {};Поскольку VAR является объявлением, переменная Foo поднимается (продвигается) здесь, поэтому, когда программа выполняется, переменная Foo является вызовой.
Однако, поскольку оператор назначения вступает в силу только во время выполнения, значение переменной Foo не определен.
Названные функции выражения
Еще одна вещь, о которой нужно поговорить, это назначение именованных функций.
var foo = function bar () {bar (); // работает}; bar (); // reveliceErrorЗдесь именованная строка функций назначается переменной Foo, поэтому она невидима вне объявления функции, но его все еще можно вызвать внутри функции стержня. Это связано с тем, что механизм JavaScript для функций именования, имя функции всегда действителен в области внутри функции.