Expressões de Função Nomeadas em JavaScript
Suponha que temos uma expressão de função como esta:
let test = function() {
console.log('!');
};
test(); // exibirá '!'
Vamos dar um nome func para a nossa função:
let test = function func() {
console.log('!');
};
test();
Como você já sabe, não é possível acessar a função por este nome de fora:
let test = function func() {
console.log('!');
};
test(); // exibirá '!'
func(); // lançará um erro
Por que dar um nome à função se ele não estará disponível? A questão é que este nome será inacessível de fora da função, mas estará disponível dentro dela.
Vamos verificar:
let test = function func() {
console.log(func); // a função exibirá seu próprio código-fonte
};
test(); // chamamos a função
Vamos chamar nossa função dentro dela mesma:
let test = function func() {
console.log('!'); // exibimos '!'
func(); // chamamos a nós mesmos
};
test();
Se executarmos este código, será exibido um número infinito de saídas no console.
Na verdade, nossa função pode ser chamada
dentro de si mesma não apenas como func, mas
também como test:
let test = function func() {
console.log('!');
test(); // chamamos a nós mesmos
};
test();
Qual é a diferença? A diferença é que o nome
test é apenas uma variável. Durante a
execução do script, nossa função pode ser
atribuída a outra variável ou passada como
parâmetro - neste caso, a ligação entre a
variável test e a função pode ser perdida.
O nome func, no entanto, está rigidamente
vinculado à função especificamente para que
possamos nos referir à nossa função dentro
dela mesma.
Tais Expressões de Função com um nome são chamadas de expressões de função nomeadas.