Подтвердить что ты не робот

Синтаксис определения функции Javascript

Возможный дубликат:
JavaScript: var functionName = function() {} vs function functionName() {}
Объявление функций в JavaScript

Я видел 2 разных синтаксиса для определения функций в javascript:

function f() {
   ...
}

Как и

var f = function() {
    ...
};

Какая разница между ними? Является ли один из них устаревшим?

4b9b3361

Ответ 1

Не устарели, и оба будут работать. Разница здесь в том, что одна является именованной функцией (function f()), а другая - переменной, равной функции (var f = function()).

Вы должны быть осторожны при установке переменных, равных функциям. Это будет работать:

var f = function(n) { console.log(n); };
f(3); // logs 3

Но это сломается, поскольку переменная определена после вызова на нее.

f(3); // what is f? breaks.
var f = function(n) { console.log(n); };

Но нормальные функции работают нормально.

function abc(n) { console.log(n); }

abc(3); // logs 3
xyz(5); // logs 5

function xyz(n) { console.log(n); }

Это потому, что код анализируется перед исполнением, и все функции доступны для вызова. Но установка var, равная функции, подобна установке var для чего-либо еще. Порядок, когда это происходит, важен.

Теперь для некоторых более запутывающих вещей...

Существуют также "самоисполняющиеся" анонимные функции. Они проходят разными именами. Самый распространенный способ сделать это выглядит примерно так:

(function() {
    // code in here will execute right away
    // since the () at the end executes this (function(){})
})();

Существует также, возможно, лучшая версия.

!function() {
    // again, the tailing () will execute this
}();

За дополнительной информацией об анонимных функциях откройте этот пост.