He leído el modo estricto JavaScript muchas veces, y algunos dicen "Desactivar con declaraciones". En el pasado, vi todo esto montando un caballo y observando flores, y pasó, porque rara vez uso esta declaración en tiempos normales, por lo que no tiene mucho que ver conmigo mismo. Hoy no puedo evitar preguntarme por qué el "modelo estricto" no puede tolerar con la declaración.
La especificación de ECMAScript dice que "la instrucción With se usa para establecer el alcance del código en un objeto específico". Se puede ver que con la declaración cambia la cadena de alcance.
function Person(name,age,sex){this.name = name;this.age = age;this.sex = sex;}(function(){var title = 'Applicant:';var zhangsan = new Person('Zhang San',20,'male');var str = '';with(zhangsan){str = title+name+', age'+age+'years,'+sex+'sex'+', posición '+trabajo;} console.log (str);}) ();El código anterior informará que no ha sido capturado referenceError: El trabajo no está definido.
Si el bloque de instrucción anterior se cambia a
str = title+zhangsan.name+', edad'+zhangsan.age+'años',+zhangsan.sex+'sex'+', posición'+zhangsan.job;
No hay error, la salida es: Solicitante: Zhang San, 20 años, masculino, posición indefinida
Para las variables en el bloque de declaración con el bloque, al ejecutar, debe verificar si sus propiedades están en Zhangsan.
Sabemos que al ejecutar un script, hay dos procesos que se necesitan, primero compilar y luego ejecutar.
Obviamente, al compilar, no es posible determinar qué propiedades tiene el objeto representado por esta variable de Zhangsan. Solo se puede determinar que Zhangsan es una instancia de persona cuando se ejecuta. Por lo tanto, no puede ser cierto que la variable en el bloque de instrucción con la declaración es una propiedad de Zhangsan o una variable en la cadena de alcance variable anterior durante la compilación.
Esto entra en conflicto con el hecho de que la variable se define al compilar el modo estricto, por lo que el modo estricto no permite que la diferencia exista. Por lo tanto, no es difícil entender que la declaración con la declaración está deshabilitada en modo estricto.