Ao analisar o código -fonte do modelo JavaScript, descobri que há um uso interessante para gerar funções. Isso não é metaprograma?
Metaprogramação de JavaScript
A cópia do código é a seguinte:
O metaprogramação refere -se à redação de um certo tipo de programa de computador que grava ou manipula outros programas (ou ele mesmo) como seus dados ou conclui parte do trabalho que deveria ter sido concluído em tempo de compilação em tempo de execução.
JavaScript Eval
A cópia do código é a seguinte:
A função Eval () calcula uma sequência e executa o código JavaScript nele.
Pode haver o seguinte uso:
A cópia do código é a seguinte:
Eval ("x = 10; y = 20; document.write (x*y)")
Obviamente, isso é usado apenas para executar uma certa função, mas este produto é mais barato e fácil de cometer erros.
A cópia do código é a seguinte:
A função de avaliação deve ser evitada o máximo possível.
Portanto, uma maneira melhor é usar a nova função ()
Uma grande diferença entre usar a nova função () e avaliar () é que avaliar não é apenas uma função.
A cópia do código é a seguinte:
Eval () calcula uma sequência como uma expressão de JavaScript dentro do escopo de execução atual, permitindo o acesso a variáveis locais. New function () analisa o código JavaScript armazenado em uma string convertido em um objeto de função e pode ser chamado. Como o código é executado em um escopo separado, as variáveis locais não podem ser acessadas.
Em outras palavras, avaliar () interferirá no escopo da função atual. .
JavaScript New Function ()
O construtor de funções cria um novo objeto de função. No JavaScript, cada função é na verdade um objeto de função. Os objetos de função gerados usando o construtor de função são analisados quando a função é criada. Isso é menos eficiente do que usar declarações de função e chamá -las em seu código, porque as funções declaradas usando as instruções de função são analisadas com outras instruções.
A nova função () é ineficiente em comparação, que é o que podemos prever nas circunstâncias atuais.
Um exemplo simples é o seguinte:
A cópia do código é a seguinte:
var add = nova função (['x', 'y'], 'return x + y');
new function () analisa a string em uma função. . Então podemos executá -lo aplicando
A cópia do código é a seguinte:
Function.Apply (null, args)
E foi isso que vi no modelo JavaScript:
A cópia do código é a seguinte:
nova função (
tmpl.arg + ', tmpl',
"var _e = tmpl.encode" + tmpl.helper + ", _s = '" +
Str.Place (tmpl.Regexp, tmpl.func) +
"'; retornar _s;"
);
Claro que temos outras maneiras.