Domanda

Sto pensando che cose del genere with(Math){document.body.innerHTML= PI} non sarebbe esattamente buona pratica.

È stato utile?

Soluzione

Io lo chiamerei cattiva pratica, considerando come influisce la catena dell'area di validità.

Date un'occhiata a questo articolo di Douglas Crockford: " con Dichiarazione considerati nocivi "

Altri suggerimenti

La breve sintesi del link nella risposta di Matt è che il problema con l'utilizzo del "con" affermazione è che le variabili all'interno del blocco "con" 's sono ambigue. Utilizzando il seguente esempio:

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

Se non si è assolutamente certi che foo.doo.diddly.doo ha il bar o baz proprietà, non si sa se il bar e baz all'interno l'istruzione with stanno ottenendo eseguite, o qualche bar globale e baz. E 'meglio variabili uso:

var obj = foo.doo.diddly.doo;

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

Nel tuo esempio, però, la matematica non è certo un termine abbastanza a lungo da giustificare anche utilizzando una variabile, ma credo di avere un più dettagliato applicazione in mente che hai utilizzato per la domanda.

Se si accede alle proprietà (nested) oggetto una volta, quindi non c'è bisogno "cache" di loro.

Ma se vi si accede più di una volta, allora si deve memorizzare un riferimento a una variabile locale. Questo ha due vantaggi:

  1. (nidificati) proprietà non hanno bisogno di essere ricerca su più di una volta (potenzialmente nella catena di ereditarietà, che è lento!).
  2. oggetti Soprattutto globali (ma qualsiasi oggetto che non è nell'ambito corrente) ha solo bisogno di essere guardato in su una volta nella catena ambito. l'accesso successivo sarà più veloce.

E ora il collegamento al with:

Si genera un nuovo ambito, all'inizio della catena di ambito corrente. Ciò significa che qualsiasi accesso con altre variabili / oggetti costerà almeno un ambito di ricerca più, anche a variabili che sono locali alla funzione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top