Не устарели, и оба будут работать. Разница здесь в том, что одна является именованной функцией (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
}();
Заканчивать this Stack Overflow post больше анонимных функций.
Вот ответ на ваш вопрос: http://stackoverflow.com/a/1013387/236135 и вот вопрос, который был задан с правильными терминами http://stackoverflow.com/questions/1013385/what-is-the -difference-between-a-function-expression-vs-declaration-in-javascrip –