Pregunta

Estoy pensando que cosas como with(Math){document.body.innerHTML= PI} no sería exactamente una buena práctica.

¿Fue útil?

Solución

Yo diría que es una mala práctica, teniendo en cuenta cómo afecta la cadena de ámbito.

Tome un vistazo a este artículo de Douglas Crockford: " con la Declaración Considerado nociva"

Otros consejos

El breve resumen del enlace en la respuesta de Matt es que el problema con el uso de la expresión "with" es que las variables dentro del bloque "con" 's son ambiguas. Utilizando el ejemplo siguiente:

with(foo.doo.diddly.doo){
  bar = 1;
  baz = 1;
}

Si no está absolutamente seguro de que foo.doo.diddly.doo tiene las propiedades de la barra o baz, no se sabe si el bar y baz dentro de la sentencia with están siendo ejecutados, o algún global bar y baz. Es mejor que las variables de uso:

var obj = foo.doo.diddly.doo;

obj.bar = 1;
obj.baz = 1;

En su ejemplo, sin embargo, Matemáticas no es un término lo suficientemente largo para justificar incluso utilizando una variable, pero supongo que tiene una aplicación más prolija en cuenta que usted ha utilizado para la pregunta.

Si accede a las propiedades (anidada) de objeto una vez, entonces no hay necesidad de "caché" de ellos.

Pero si se accede a ellos más de una vez, entonces usted debe almacenar una referencia en una variable local. Esto tiene dos ventajas:

  1. (anidados) propiedades no necesita ser de búsqueda hasta más de una vez (potencialmente en la cadena de herencia que es lento!).
  2. objetos Especialmente globales (pero cualquier objeto que no está en el ámbito actual) sólo necesita ser buscado una vez en la cadena de alcance. El acceso posterior será más rápido.

Y ahora la conexión a with:

Se genera un nuevo ámbito de aplicación al comienzo de la cadena ámbito actual. Esto significa que cualquier acceso a otras variables / objetos costará al menos un ámbito de búsqueda más, incluso a las variables que son locales a la función.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top