expressão de função:
//someFunction(); //wouldn't work when uncommented
var someFunction = function(){ alert('yay'); };
A expressão func neste caso é anônima, mas atribuída a um var para referência. Isso é diferente de uma instrução de função rotulada das seguintes maneiras:
- não pode ser içado (chamado antes de ser definido)
new someFunction().constructor.name === 'someFunction';//false
As instâncias não obtêm o nome do var para constructor.name porque uma referência à função é atribuída ao var, mas o var, não a função, está vinculado ao nome do var
Em uma instrução de função rotulada:
//someFunction(); //works when uncommented
function someFunction(){ alert('yay'); }
- trabalhos de elevação
new someFunction().constructor.name === 'someFunction'; //true
o nome está vinculado diretamente à função.
De um modo geral, não há realmente nenhuma grande razão para fazer expressão para var, a menos que você queira que as chamadas falhem se as coisas mudam ou você está definindo / atribuindo um método em uma linha. Na verdade, considero a elevação útil para organizar objetos com definições internas de função e método na parte inferior, para que eu possa entender o comportamento real do objeto e fazer definições de método público de uma linha (apenas atribuindo funcs ao this.
mesmo nome), tudo em um local para facilitar a referência. Você deve sempre tentar usar instruções rotuladas para construtores, IMO, para poder identificar o 'tipo' de um objeto por meio de seu construtor.