Distinguing Eval () y New Function () en JavaScript
en JavaScript, los desarrolladores a menudo encuentran dos funciones que parecen realizar una tarea similar: eval () y nueva función (). Si bien ambas funciones evalúan las cadenas como código, sus mecanismos e implicaciones subyacentes son significativamente diferentes.
eval () vs New Function ()
la función eval () evalúa una cadena como una expresión de JavaScript dentro del alcance de la ejecución actual. Esto significa que tiene acceso a variables locales definidas en el alcance actual. En contraste, la nueva función () analiza el código JavaScript almacenado en una cadena en un objeto de función, que luego se puede llamar. Este objeto de función se crea en un alcance separado y, por lo tanto, no puede acceder a las variables locales del entorno de llamadas.
ejemplo
para ilustrar esta distinción, considere el siguiente código:
var evaluate = function(string) { return eval('(' string ')'); } var func = function(string) { return (new Function( 'return (' string ')' )()); } console.log(evaluate('2 1')); console.log(func('2 1'));
ambas funciones generarán el resultado esperado de 3. Sin embargo, si modificamos el código para utilizar variables locales, la diferencia se vuelve aparente:
function test1() { var a = 11; eval('(a = 22)'); // Modifies the local variable within the `test1` function alert(a); // Alerts 22 }
En este caso, usar eval () modificaría la variable local A porque la evaluación ocurre dentro del alcance de la función Test1. Sin embargo, si usáramos una nueva función ('return (a = 22);') () en su lugar, la variable local a no se vería afectada porque el código se ejecuta en un alcance separado.
Seguridad y consideraciones
Es importante tener en cuenta que evaluación () y la nueva función () puede presentar riesgos de seguridad cuando se usan con los datos no sutilizados. La entrada maliciosa puede exponer información confidencial o ejecutar código arbitrario. Por lo tanto, se recomienda encarecidamente evitar usar estas funciones a menos que sea absolutamente necesario.
conclusión
en resumen, eval () y la nueva función () funcione de manera diferente en JavaScript. eval () evalúa las cadenas dentro del alcance de ejecución actual, mientras que la nueva función () crea un nuevo alcance para la evaluación. Comprender esta distinción es crucial para una programación efectiva de JavaScript y mantenimiento de la seguridad.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3