Funções

Funções

Todos aproximadamente a mesma coisa, com algumas diferenças sutis:

Há uma distinção entre o nome da função e a variável a função é atribuída. O nome da função não pode ser alterado, enquanto a variável à qual a função é atribuída pode ser reatribuída. O nome da função pode ser usado apenas dentro do corpo da função. Tentar usá-lo fora do corpo da função resulta em um erro (ou undefined se o nome da função foi anteriormente declarado através de uma declaração var)., For example:

var y = function x() {};alert(x); // throws an error

the function name also appears when the function is serialized via Function‘s toString method.

Por outro lado, a variável a que a função é atribuída é limitada apenas pelo seu âmbito, que é garantido incluir o âmbito em que a função é declarada.

Como mostra o quarto exemplo, o nome da função pode ser diferente da variável a que a função é atribuída. Eles não têm nenhuma relação um com o outro. Uma declaração de função também cria uma variável com o mesmo nome que o nome da função., Assim, ao contrário daqueles definidos pela função expressões, funções definidas por declarações de função pode ser acessada pelo seu nome, no âmbito foram definidos em:

Uma função definida por ‘new Function' não tem um nome de função. No entanto, no motor JavaScript SpiderMonkey, a forma serializada da função mostra como se tivesse o nome “anônimo”. Por exemplo, alert(new Function()) saídas:

function anonymous() {}

Desde que a função realmente não tem um nome, anonymous não é uma variável que pode ser acessada dentro da função., Por exemplo, o seguinte iria resultar em um erro:

var foo = new Function("alert(anonymous);");foo();

ao contrário de funções definidas por funções, expressões ou pelo Function construtor, uma função definida por uma declaração de função pode ser usada antes da declaração da função em si. Por exemplo:

foo(); // alerts FOO!function foo() { alert('FOO!');}

Uma função definida por uma expressão de função ou por uma declaração de função herda o escopo atual. Isto é, a função forma um fechamento., Por outro lado, uma função definida por um Function construtor não herda nenhum escopo que não seja o escopo global (que todas as funções herdam).

funções definidas por expressões de funções e declarações de funções são processadas apenas uma vez, enquanto as definidas pelo Function construtor não são. Isto é, a cadeia corporal da função passada para o Function construtor deve ser analisada cada vez que o construtor é chamado., Embora uma expressão de função crie um fechamento a cada vez, o corpo da função não é reparada, então as expressões de função ainda são mais rápidas que “new Function(...)“. Portanto, o construtor Function deve geralmente ser evitado sempre que possível.

deve-se notar, no entanto, que expressões de funções e declarações de funções aninhadas dentro da função gerada pela análise de um Function constructor ‘s string não são processadas repetidamente. Por exemplo:

uma declaração de função é muito facilmente (e muitas vezes não intencionalmente) transformada em uma expressão de função., Uma declaração de função deixa de ser uma Quando:

  • se torna parte de uma expressão
  • não é mais um “elemento fonte” de uma função ou o próprio script. Um “elemento fonte” é uma declaração não aninhada no script ou um corpo de função:

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *