Al mirar el código fuente de la plantilla de JavaScript, descubrí que hay un uso interesante para generar funciones. ¿No es esta metaprogramación?
Metaprograma de Javascript
La copia del código es la siguiente:
La metaprogramación se refiere a la escritura de un cierto tipo de programa de computadora que escribe o manipula otros programas (o en sí) como sus datos, o completa parte del trabajo que debería haberse completado en el momento de la compilación en tiempo de ejecución.
JavaScript Eval
La copia del código es la siguiente:
La función eval () calcula una cadena y ejecuta el código JavaScript en ella.
Puede haber el siguiente uso:
La copia del código es la siguiente:
eval ("x = 10; y = 20; document.write (x*y)")
Por supuesto, esto solo se usa para ejecutar una determinada función, pero este producto es más barato y fácil de cometer errores.
La copia del código es la siguiente:
La función Eval debe evitarse tanto como sea posible.
Entonces, una mejor manera es usar nueva función ()
Una gran diferencia entre usar nueva función () y eval () es que EVAL no es solo una función.
La copia del código es la siguiente:
eval () calcula una cadena como una expresión de JavaScript dentro del alcance de ejecución actual, lo que permite el acceso a variables locales. NUEVA FUNCIÓN () PARSES Código JavaScript almacenado en una cadena convertida en un objeto de función y luego se puede llamar. Debido a que el código se ejecuta en un alcance separado, no se puede acceder a variables locales.
En otras palabras, eval () interferirá con el alcance de la función actual. .
JavaScript nueva función ()
El constructor de funciones crea un nuevo objeto de función. En JavaScript, cada función es en realidad un objeto de función. Los objetos de función generados usando el constructor de funciones se analizan cuando se crea la función. Esto es menos eficiente que usar declaraciones de función y llamarlas en su código, porque las funciones declaradas utilizando declaraciones de funciones se analizan con otras declaraciones.
La nueva función () es ineficiente en comparación, que es lo que podemos predecir en las circunstancias actuales.
Un ejemplo simple es el siguiente:
La copia del código es la siguiente:
var add = nueva función (['x', 'y'], 'return x + y');
nueva función () analiza la cadena en una función. . Entonces podemos ejecutarlo aplicando
La copia del código es la siguiente:
Function.apply (nulo, args)
Y esto es lo que vi en la plantilla JavaScript:
La copia del código es la siguiente:
nueva función (
tmpl.arg + ', tmpl',
"var _e = tmpl.encode" + tmpl.helper + ", _s = '" +
str.replace (tmpl.regexp, tmpl.func) +
"'; return _s;"
);
Por supuesto que tenemos otras formas.