Continuo a vedere gli avvertimenti di non utilizzare le variabili globali in JavaScript, ma sembra che l'unica ragione per cui la gente dice sia perché blocca lo spazio dei nomi globale. Posso immaginare che possa essere risolto facilmente inserendo tutte le variabili in un unico grande oggetto. Ora la domanda è: ci sono altri motivi per non usare variabili globali diverse dal sake? Ci sono problemi di prestazioni o di compatibilità con loro?Perché le variabili globali sono considerate cattive pratiche?
risposta
Essi ingombrano lo spazio dei nomi globale e sono più lenti a cercare rispetto alle variabili locali.
Prima di tutto, avere molte variabili globali è sempre una brutta cosa perché è facile dimenticare di aver dichiarato una variabile da qualche parte e di riscriverla accidentalmente da qualche altra parte. Se la tua prima variabile era locale allora non hai un problema. Se era globale, è stato appena sovrascritto. Ciò diventa ancora peggiore quando entri in un livello implicito (ad es. Quando dici someVar = someValue
senza dichiarare alcunVar con la parola chiave var
).
In secondo luogo, le variabili globali richiedono più tempo per "trovare" le variabili locali. La differenza di velocità non è enorme, ma esiste .
Per ulteriori informazioni e una spiegazione più approfondita del motivo per cui i globals sono considerati cattive pratiche, si consiglia di controllare this page.
Fondamentalmente, poiché è possibile accedervi da qualsiasi script sulla pagina e poiché è possibile ripetere il nome nello stesso ambito. Ecco perché un sacco di motori JavaScript utilizzare questo codice:
(function(){
var foo = 'foo',//Local
bar = 'bar';//Local
window.globalVar = foo + bar;//Global
})();
alert(foo);//Error
alert(bar);//Error
alert(globalVar);//'foobar'
Se lo script è molto lungo e si utilizza queste variabili da un sacco di funzioni che aumenterà il tempo di debug in quanto il valore della variabile globale potrebbe essere stato cambiato da qualsiasi parte, quindi se stai monitorando dove questo è cambiato in un valore non previsto dovrai controllarli tutti.
Questo scenario è ancora più difficile se diversi programmatori modificano questa variabile da altri script inclusi nella pagina.
Il debugging più complesso è solo uno dei motivi per cui i globals sono negativi. Altri sono elencati in [Perché i globali sono così cattivi] (http://programmers.stackexchange.com/questions/148108/why-is-global-state-so-evil/148154#148154). –
Non ci dovrebbe essere alcun problema utilizzando le variabili globali nel codice finché li state avvolgendo all'interno di un uniqe namespase/oggetto (per evitare la collisione con gli script che non sono tuoi)
C'è uno adventage di usando la variabile globale in javascript, e deriva dal fatto che javascript non è un linguaggio di tipo forte. lì per, se si passa oggetti Somes complessi come argomenti a una funzione, voi probebly perdere tutto l'Intellisence per quegli oggetti (all'interno della portata delle funzioni.) durante l'utilizzo di oggetti insteads globali, conserverà che Intellisence. e quando si ha l'intelisence, in realtà può migliorare il tempo di debug (al contrario di quello che altri hanno detto ...)
personalmente lo trovo molto utile e sicuramente ha posto nel mio codice.
(ovviamente, si dovrebbe ALWAYSE rendere il giusto equilibrio tra i locali e le variabili globals)
Le variabili globali possono aumentare significativamente l'accoppiamento, riduce in modo significativo la scalabilità e la verificabilità del codice. Una volta di iniziare a usare globali, che hai ora di sapere dove e come la variabile viene modificato (cioè la rottura incapsulamento). La maggior parte della letteratura e convenzioni là fuori sostengono che le prestazioni è l'ultima delle vostre preoccupazioni quando si utilizzano variabili globali.
questo è un fantastic article outlining why variabili globali provocano mal di testa.
Questa è la migliore risposta. –
In breve, le variabili globali causano (e più) i seguenti problemi.
1) Collisioni di nomi variabili: se si sta lavorando su un team e sia te sia il tuo collega di lavoro utilizzano lo stesso nome di variabile nello scope globale, la variabile definita last sovrascriverà la variabile iniziale. Questo ovvio può avere conseguenze devastanti.
2) Sicurezza: in particolare sul Web, ogni utente ha accesso all'oggetto Window (o globale). Inserendo le variabili nello scope globale, si dà a qualsiasi utente la possibilità di vedere o modificare le variabili.
3) Più lento - Questo è probabilmente trascurabile, ma esiste ancora. Il modo in cui le ricerche variabili di JavaScript funzionano è che il motore JavaScript eseguirà una ricerca sull'ambito corrente in cui la variabile viene cercata. Se non riesce a trovarlo, farà una ricerca nel prossimo ambito genitore. Se non lo trova lì, continuerà a guardare verso l'alto fino a raggiungere l'oggetto globale alla ricerca di quella variabile. Se tutte le variabili si trovano nello scope globale, il motore JavaScript dovrà sempre passare attraverso ogni ambito per raggiungere infine l'ambito globale per trovare la variabile.
- 1. Le variabili di istanza sono le nuove variabili globali?
- 2. Le proprietà di impostazione sull'oggetto Window sono considerate pratiche errate?
- 3. Jquery Cattive pratiche
- 4. Le variabili globali scherzano
- 5. le variabili globali sono nulle quando si utilizza PHPUnit
- 6. Rendere globali tutte le variabili
- 7. Database Upserts - Buone o cattive pratiche?
- 8. Le variabili statiche di ASP.NET C# sono globali?
- 9. Dove sono memorizzate le variabili globali come $ _GLOBAL, $ _POST ecc.?
- 10. In quale oggetto sono memorizzate le variabili globali di Javascript?
- 11. Le variabili globali sono sempre inizializzate a zero in C?
- 12. Le variabili globali sono thread safe in beuta?
- 13. Le variabili python "globali" (modulo) sono thread locali?
- 14. Come sono collegate le variabili globali nelle librerie condivise?
- 15. Operatore ternario: cattive o buone pratiche?
- 16. Le variabili globali rallentare codice
- 17. Le liste sono uguali ma non sono considerate uguali?
- 18. Quante variabili di sessione per utente sono considerate troppo? - PHP
- 19. Perché Lua è impostato su variabili globali?
- 20. Perché i globali sono cattivi?
- 21. Ci sono differenze tra le nostre variabili definite e le normali variabili globali in Perl?
- 22. Python: Perché si dice che le variabili a cui si fa riferimento sono solo implicitamente globali?
- 23. Perché le variabili di blocco sono facoltative?
- 24. Le variabili globali e locali in R
- 25. Perché le costanti di tutte le maiuscole sono considerate uno stile di codifica errato?
- 26. Catturare le variabili globali di Nashorn
- 27. Rendi globali tutte le variabili, PHP
- 28. JavaScript: Le variabili globali dopo Ajax richieste
- 29. Elenca tutte le variabili globali in Node.js
- 30. Come utilizzare le variabili globali in ObjectDataSource.SelectMethod?
possibile duplicato di [Perché i globali sono nocivi?] (Http://stackoverflow.com/questions/4246284/why-are-globals-bad) e [altre domande] (http://stackoverflow.com/search? q = javascript + il motivo per cui sono + + + + variabili globali male). –
JavaScript o altre lingue, importa meno. Ecco la [risposta canonica al perché i globals sono cattivi] (http://programmers.stackexchange.com/questions/148108/why-is-global-state-so-evil/148154#148154). –