2010-10-28 15 views
7

Quindi ho letto il numero Javascript - The Good Parts e una cosa che Crockford sottolinea è l'uso debole delle variabili globali in Javascript, in modo tale che se il prodotto viene espanso in qualche modo e si basa su una variabile 'globale' che potrebbe essere impostata inavvertitamente.Variabili globali JavaScript e funzioni anonime autoinventi

Questo è tutto a posto, e comprendo i pro/contro della protezione delle variabili, anche in altri modi, come le chiusure. Comunque, stavo facendo qualche pensiero, e avvolgendo il codice in una funzione in questo modo:

(function() { 
    var x = 'meh'; 
})(); 
(function() { 
    alert(typeof x); // undefined 
})(); 

conferisce portata variabile, che impedisce così la contaminazione incrociata delle variabili. Non sono sicuro se ci sia un evidente svantaggio di questo approccio e mi chiedo se la community abbia qualche input, o se sto solo pensando troppo alle cose e ignorando il punto principale.

risposta

6

Questo è un modo perfettamente legale di fare le cose - le variabili all'interno della funzione (purché sono preceduti da var) sono locale alla funzione. Si chiama module pattern ed è molto ben accettato.

+1

Impressionante. Apprezzo il link. Mi chiedo perché questo non sia realmente menzionato nel suo libro (finora, è possibile che sia in seguito, ma avrebbe senso averlo nella parte che colpisce le variabili globali). Almeno so di non essere troppo analitico per una volta. –

+2

Questo è il mio giorno di raccolta nitida, a quanto pare, ma quelle cose non sono chiamate * chiusure * in senso stretto (in senso generale di informatica, tutte le funzioni JavaScript sono chiusure): quelle funzioni anonime auto-invocanti sarebbero solo chiusure se vengono utilizzati al di fuori dell'ambito in cui sono stati definiti (ad esempio, quando si collega una funzione anonima a un listener di eventi all'interno di una funzione che esce prima che il listener sia scollegato). –

+0

@Marcel - grazie, l'ho aggiornato per usare 'function' piuttosto che' closure'. –

0

Per creare applicazioni con javascript, è necessario tentare di mantenere le variabili in un ambito locale e qualsiasi cosa all'interno di uno spazio dei nomi. È una buona pratica e previene una serie di codici di danno e comportamenti inaspettati.

leggere this

si tratta di un articolo che parla i vantaggi del farlo.

0

Rendendolo una funzione globale non è la risposta. Perché non dovresti farlo? Ciò mantiene x fuori dallo spazio dei nomi globale.

(function() { 
    var x = 'meh'; 
    alert(typeof x); //string 
})(); 
+0

Il punto nell'esempio era quello di ottenere undefined, quindi isolamento l'uno dall'altro. –

Problemi correlati