Existem dois métodos principais para criar funções no JavaScript: declarações de função e expressões de função. Ambos os métodos têm diferentes cenários aplicáveis. Esta nota se concentra principalmente em várias características principais das expressões de função e em seus cenários de uso, descritos abaixo.
Principais características
• Nome da função opcional
O nome da função é uma parte necessária da declaração de função. Este nome de função é equivalente a uma variável. A função recém -definida será copiada para essa variável. A chamada para a função precisa ser executada através dessa variável no futuro. Para expressões de função, o nome da função é opcional, por exemplo:
var sub = function (a1, a2) {return a1-a2; }Neste exemplo, a expressão da função não tem nome e pertence à expressão da função anônima. Vamos dar uma olhada no exemplo a seguir:
var sub = função f (a1, a2) {return a1-a2; } console.log (f (5,3)); // Método de chamada incorreto console.log (sub (5,3)); // Método de chamada corretaNeste exemplo, o nome da expressão da função é f. Esse nome f realmente se torna uma variável local dentro da função e refere -se ao próprio objeto de função. É de grande utilidade quando a função recursiva e será discutida em detalhes posteriormente.
• Criar durante a fase de execução (diferente das declarações de função)
Esse recurso é que a expressão da função é obviamente diferente da declaração de função.
O intérprete não trata os dois métodos igualmente ao analisar o código JavaScript. O intérprete primeiro lerá a declaração da função e a disponibilizará antes de executar qualquer código; Embora para expressões de função, você deve esperar até que o intérprete seja executado na linha de código onde está localizado antes de ser realmente analisado e executado. Por exemplo:
console.log (add (1,2)); // "3" console.log (sub (5,3)); // "identificador inesperado", função de erro Add (A1, A2) {retorna A1+A2; } var sub = function (a1, a2) {return a1-a2; }A primeira declaração pode ser executada normalmente. Ao avaliar o código, o mecanismo JavaScript declara funções no primeiro passe e as coloca no topo da árvore de origem através de um processo chamado Promoção da Declaração de Função. Ou seja, durante o estágio de criação do ambiente de execução (a função é chamada, mas não iniciou a execução), a declaração da função será "hospedagem". Portanto, mesmo se o código que declara uma função está por trás do código que o chama, o mecanismo JavaScript elevará a declaração de função para o topo. No entanto, se a declaração da função for alterada para uma expressão de função, um erro será relatado durante a execução. O motivo é que, antes de executar a instrução em que a função está localizada, o sub variável não contém uma referência à função. Ou seja, o submarino variável será atribuído durante o estágio de execução do código. Exceto pelas diferenças acima, em outros aspectos, a sintaxe das declarações de função e expressões de função é equivalente.
• Não afeta objetos variáveis
var sub = função f (a1, a2) {console.log (typeof f); // "função" retorna A1-A2; } console.log (tipo de f); // "ReferenceError não capturado: f não está definido (...)" "A partir do exemplo acima, podemos ver que o nome da função f pode ser usado apenas dentro do objeto de função, e o nome da função da expressão da função não existe no objeto variável.
Use cenários
Existem muitos cenários de uso para expressões de função. O seguinte descreve principalmente as aplicações de recursão de função e modularidade do código.
• Recursão da função
Veja o seguinte exemplo:
função fatorial (num) {if (num <= 1) {return 1; } else {return num * fatorial (num - 1); }}Esta é uma função fatorial clássica, mas um problema com este exemplo é que o nome do nome da função está intimamente acoplado ao corpo da função. Se você executar a seguinte declaração, receberá um erro:
var outro factorial = fatorial; fatorial = nulo; console.log (outro fator (5)); // "TypeError não capturado: Fatorial não é uma função"
O motivo de um erro é que a função fatorial será chamada dentro do corpo da função e a referência à função pela variável fatorial foi cancelada, portanto um erro é relatado. A solução para essa situação geralmente pode ser resolvida usando argumentos.Callee, que sempre aponta para a função atual, por exemplo:
função fatorial (num) {if (num <= 1) {return 1; } else {return num * argumentos.callee (num - 1); }}Dessa forma, você pode obter o resultado correto executando outra função fatorial aqui. No entanto, sob o modo rigoroso "rigoroso", os argumentos.Callee não podem ser acessados por meio de scripts. É assim que resolver esse problema usando expressões de função, por exemplo:
var fatorial = (função f (num) {if (num <= 1) {return 1;} else {return num * f (num - 1);}}); console.log (fatorial (5)); // "120"• Modularidade do código
Não há escopo no nível de bloco no JavaScript, mas podemos usar expressões de função para modularizar o código JavaScript. O código modular pode encapsular detalhes que não precisam ser conhecidos pelo usuário e apenas expô -los às interfaces relevantes do usuário, evitando a poluição ao ambiente global, como:
var pessoa = (function () {var _name = ""; return {getName: function () {return _name;}, setName: function (newName) {_name = newName;}};} ()); pessoa.setName ("John"); pessoa.getName (); //"John"Neste exemplo, é criada uma expressão de função anônima, que contém as próprias variáveis e funções privadas do módulo; O resultado da execução dessa expressão de função retorna um objeto, que contém a interface pública exposta pelo módulo ao usuário. Existem muitas formas específicas de modularidade do código. Por exemplo, em algumas bibliotecas JavaScript comumente usadas, são usadas funções de execução imediatas semelhantes aos seguintes exemplos:
(function () {var _name = ""; var root = this; var person = {getName: function () {return _name;}, setName: function (newName) {_name = newname;}}}; root.person = pessoa;} .call (this)); pessoa.setName ("John"); pessoa.getName (); //"John"Este método usa diretamente o objeto que contém a interface pública do módulo como um atributo do objeto global, para que o atributo do objeto global possa ser usado em outros lugares.
As expressões de função clichê de clichê acima são todo o conteúdo que eu compartilho com você. Espero que você possa lhe dar uma referência e espero que você possa apoiar mais o wulin.com.