Sta usando con in cattive pratiche javascript?
-
13-10-2019 - |
Domanda
Sto pensando che cose del genere with(Math){document.body.innerHTML= PI}
non sarebbe esattamente buona pratica.
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:
- (nidificati) proprietà non hanno bisogno di essere ricerca su più di una volta (potenzialmente nella catena di ereditarietà, che è lento!).
- oggetti Soprattutto globali (ma qualsiasi oggetto che non è nell'ambito corrente) ha solo bisogno di essere guardato in su una volta ??em> 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.