выражение функции:
//someFunction(); //wouldn't work when uncommented
var someFunction = function(){ alert('yay'); };
В этом случае выражение func является анонимным, но присваивается переменной var для справки. Это отличается от помеченного оператора функции следующими способами:
- он не может быть поднят (вызван до того, как определен)
new someFunction().constructor.name === 'someFunction';//false
экземпляры не получают имя переменной для constructor.name, потому что ссылка на функцию назначена переменной, но переменная, а не функция, привязана к имени переменной
В помеченном операторе функции:
//someFunction(); //works when uncommented
function someFunction(){ alert('yay'); }
- грузоподъемные работы
new someFunction().constructor.name === 'someFunction'; //true
имя напрямую связано с функцией.
Вообще говоря, на самом деле нет особой причины делать выражение для var, если только вы не хотите, чтобы вызовы не выполнялись, если что-то перемещается или вы определяете / назначаете метод в одной строке. Я на самом деле считаю подъем полезным для организации объектов с внутренними определениями функций и методов в нижней части, чтобы я мог перейти к реальному поведению объекта и выполнить однострочные публичные определения методов (просто назначив функции this.
с одинаковыми именами) все в одном место для удобства пользования. Вы должны всегда пытаться использовать помеченные операторы для конструкторов, IMO, чтобы вы могли определить «тип» объекта через его конструктор.