Первый - это именованный оператор функции, второй присваивает переменную анонимную функцию.
Функция заявление добавляется в его объем сразу - вам не нужно, чтобы запустить его, прежде чем быть в состоянии назвать, так это работает:
var y = sum(1, 2);
function sum(x, y) {
return x + y;
}
Но выражение функции только присваивается переменной когда код выполняется, так что это не работает:
// Error here because the function hasn't been assigned to sum yet.
var y = sum(1, 2);
var sum = function(x, y) {
return x + y;
}
преимущество формы выражения является то, что вы можете использовать его, чтобы назначить различные функции для выражения в разных точках - так что вы можете изменить функцию, или использовать другую в разных условиях (например, в зависимости от используемого браузера).
Преимущество именованного оператора функции заключается в том, что отладчики смогут отображать имя. Хотя, вы можете назвать функцию выражения:
var sum = function sum(x, y) {
return x + y;
}
Но это может привести к путанице, так как эти два названия, на самом деле в разных областях и относятся к разным вещам.
Не использовать функцию имени, просто используйте анонимную функцию для инкапсуляции, предотвращая переменное загрязнение глобальной области. – 2014-06-11 13:30:36