Ответ 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
}();
За дополнительной информацией об анонимных функциях откройте этот пост.