"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cuándo usar `eval ()` y `nueva función ()` en JavaScript?

¿Cuándo usar `eval ()` y `nueva función ()` en JavaScript?

Publicado el 2025-04-13
Navegar:446

When to Use `eval()` vs `new Function()` in JavaScript?

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.

Último tutorial Más>

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