Las palabras anteriores
Evalu y con a menudo no les gusta, como si su existencia fuera un error. En CSS, las tablas no se les gusta y solo se usa tablas para mostrar datos en las páginas web, en lugar de un diseño, se puede negar como irregular y exceso de corrección. Entonces, ¿cuál es la situación de Eval y con? Este artículo introducirá la función eval () y con la declaración en detalle
evaluación
definición
eval () es una función global. JavaScript usa eval () para explicar la cadena en ejecución compuesta por el código fuente de JavaScript.
resultado var = eval ('3+2'); console.log (resultado, typeof Result); // 5 'Número'uso
eval () tiene solo un parámetro. Si el parámetro aprobado no es una cadena, devuelve directamente este parámetro. Si el parámetro es una cadena, compilará la cadena como código JavaScript. Si la compilación falla, se lanza una excepción de error de sintaxis (sintaxerror). Si la compilación es exitosa, el código se ejecuta y se devuelve el valor de la última expresión o declaración en la cadena, y si la última expresión o declaración no tiene valor, eventualmente devolverá indefinido. Si una cadena lanza una excepción, la excepción pasará la llamada a eval ()
var num = 1; var str = 'test'; console.log (eval (num)); // 1console.log (eval (str)); // referenceError: la prueba no está definida var strlong1 = 'var x = 1; var y = 2;'; console.log (eval (strlong1), x, y); // sinfinado 1 2var strlong2 = 'var x = 1 1; x ++; '; console.log (eval (strlong2), x); // 1 2
Alcance
eval () utiliza el entorno de alcance variable que lo llama. Es decir, busca el valor de una variable y define el funcionamiento de una nueva variable y función y el código en el alcance local.
var b = 2; función foo (str, a) {eval (str); console.log (a, b);} foo ('var b = 3;', 1); // 1 3Alias
Cuando se llame a través de un alias, eval () ejecutará su cadena como el código global de nivel superior. El código ejecutado puede definir nuevas variables globales y funciones globales, o asignar valores a variables globales, pero no puede usar o modificar variables locales en la función.
var geval = eval; var x = 'global', y = 'global'; function f () {var x = 'local'; eval ('x += "cambiado";'); return x;} function g () {var y = 'local'; geval ('y += "cambiado";'); return y;} console.log (f (), x); // localConsole.Log.log (g (), y); // localChangedededededededededed[NOTA] IE8-El navegador llama eval () a través de un alias y llamadas evaluar normalmente el mismo resultado.
efecto secundario
El intérprete JavaScript realiza mucho análisis de código y optimización. El problema con eval () es que el código utilizado para la ejecución dinámica generalmente no se analiza, por lo que el intérprete no puede optimizarlo, lo que conducirá a la degradación del rendimiento
Similar a eval () son setTimeOut (), setInterval (), new function (), etc. Estas funciones se pueden ejecutar dinámicamente cuando el programa se ejecuta utilizando cadenas como parámetros. Los beneficios de este mecanismo de ejecución no pueden compensar sus pérdidas de rendimiento, por lo que debe intentar evitar usarlo.
Modo estricto
Debido a que la función eval () es demasiado poderosa, el modo estricto lo restringe estrictamente
【1】 Las variables o funciones no se pueden crear a través de la función eval (), pero sus valores se pueden consultar y cambiar
'use estrict'; eval ('var x = 1;'); console.log (x); // referenceError: x no está definido 'usa estricto'; var x = 1; eval ('x = 2;'); console.log (x); // 2【2】 No se puede usar Eval como identificador
'Use estricto'; var eval = 10; // syntaxError: evaluación o argumentos inesperados en modo estricto
con
El propósito de definir con declaraciones es simplificar el trabajo de escribir el mismo objeto varias veces.
La instrucción With agrega objeto al jefe de la cadena de alcance, luego ejecuta la declaración y finalmente restaura la cadena de alcance a su estado original.
con (objeto) {declaración;}efecto
Cuando el nivel de anidación de objetos es profundo, con las declaraciones generalmente se usan para simplificar la redacción de códigos. En esencia, se procesa tratando la referencia de un objeto como un alcance y utilizando los atributos del objeto como identificadores en el alcance, creando así un nuevo alcance léxico
En el cliente JavaScript, una expresión como la siguiente puede usarse para acceder a elementos en forma HTML
document.forms [0] .address.Value
Si tal expresión aparece varias veces en el código, puede usar la instrucción With para agregar el objeto de formulario al nivel superior de la cadena de alcance
con (documento
Este método reduce mucha entrada sin tener que prefijo documentos. Formas [0] para cada nombre de propiedad. Este objeto se monta temporalmente en la cadena de alcance. Cuando JavaScript necesita analizar identificadores como la dirección, buscará automáticamente en este objeto.
[Nota] La instrucción With proporciona un acceso directo para leer las propiedades de un objeto, pero no puede crear propiedades de un objeto
Si el objeto O tiene un atributo X, entonces el siguiente código asigna el valor del atributo a 1
var o = {x: 0}; con (o) x = 1; console.log (ox); // 1Si no se define el atributo X en o, el siguiente código es exactamente el mismo que el código x = 1 que no usa la instrucción With. Esto se debe a que la consulta LHS se realiza en la variable x y 1 se asigna a ella
var o = {}; con (o) x = 1; console.log (ox); // undefinedconsole.log (x); // 1efecto secundario
Similar a Eval, el código JavaScript de la declaración con la declaración es muy difícil de optimizar, y también causa dificultades en la depuración del código. Es más lento que el código que no usa la declaración con la instrucción.
Además, si la declaración con la declaración es inapropiada, puede causar fugas variables y contaminar el alcance global.
var x = 1; var o = {}; con (o) {x = 2;} console.log (x); // 2console.log (ox); // indefinidoModo estricto
En modo estricto, el uso de con declaraciones está prohibido
// SyntaxError: el código de modo estricto no puede incluir una con Declaración 'Strict'; var o = {}; con (o) {x = 2;}por fin
El uso de Eval y con hace imposible que el motor optimice las búsquedas de alcance en el momento de la compilación, lo que resulta en una degradación del rendimiento y un código más lento en ejecución. Debido a que Eval y con Raramente se usan en el trabajo real, las restricciones en modo estricto tienen poco impacto en nosotros. Al igual que el Ministerio de Asuntos Exteriores emitió un anuncio un día que nuestro país ya no emitirá visas a Jamaica. Aunque hemos oído hablar de Jamaica, la mayoría de las personas no van allí una vez en sus vidas, por lo que no importa. Del mismo modo, no importa si Eval y con no les gusta o no
Lo anterior es una explicación detallada del resumen de aprendizaje de JavaScript que el editor se le presentó es la función evalu de evaluación y con ejemplos de declaración. Espero que te sea útil. Si tiene alguna pregunta, déjame un mensaje y el editor le responderá a tiempo. ¡Muchas gracias por su apoyo al sitio web de Wulin.com!