Domanda

Ho usato JSLint per farmi sentire in colpa per il mio JavaScript.È fantastico, comunque.C'è un controllo che non capisco bene e vorrei il tuo punto di vista, per favore.

Da jslint.com:

Nei linguaggi con ambito a blocchi, di solito è consigliabile che le variabili siano dichiarate nel sito del primo utilizzo.Ma poiché JavaScript non ha un ambito di blocco, è più saggio dichiarare tutte le variabili di una funzione all'inizio della funzione. Si consiglia di utilizzare una singola istruzione var per funzione.

Cosa dice veramente l'ultima frase in grassetto?Penso che dovrei dichiarare più variabili come questa?

var foo = 1, bar = 2;

E la parte "saggio" è solo uno stile di programmazione per scoraggiare gli errori in futuro o c'è di più?

Grazie per l'aiuto.

È stato utile?

Soluzione

Il problema è che, che tu te ne renda conto o no, javascript sposta in modo invisibile tutte le dichiarazioni var in cima all'ambito della funzione.

quindi se hai una funzione come questa

var i = 5;
function testvar () {
     alert(i);
     var i=3;
}
testvar();

la finestra di avviso conterrà indefiniti.perché internamente è stato cambiato in questo:

var i = 5;
function testvar () {
     var i;
     alert(i);
     i=3;
}
testvar();

questo si chiama "sollevamento".Il motivo per cui Crockford sostiene così fortemente che le dichiarazioni var vadano all'inizio è che fa sì che il codice corrisponda visibilmente a ciò che farà, invece di consentire il verificarsi di comportamenti invisibili e inaspettati.

Altri suggerimenti

In sostanza in JavaScript blocchi ({ ... }) non introducono un nuovo ambito, c'è solo la funzione-scope, in modo che nessun campo di applicazione è creato su qualsiasi altra dichiarazione.

Una variabile introdotto in qualsiasi punto di una funzione è visibile ovunque nella funzione.

Ad esempio:

function myFunction(){
  var one = 1;

  if (one){
    var two = one + 1;
  }

  (function () {
    var three = one + two;
  })();

  // at this point both variables *one* and *two* are accessible but 
  // the variable *three* was declared in the scope of a inner function
  // and is not accessible  at this point.
}

In linguaggi con ambito blocco, raccomanda di dichiarare le variabili in corrispondenza del punto di primo utilizzo, ma dal momento che JavaScript non ha scopo di blocco, è meglio dichiarare tutte le variabili di una funzione nella parte superiore della funzione.

Controlla questo articolo .

La mancanza di portata blocco spiega il codice qui sotto:

var a = 1;
if (something) {
    var a = 2;
}

alert(a); // Alerts "2"

Nella maggior parte in stile C (come nella sintassi) lingue, la definizione var a = 2 definirebbe 'a' solo per il campo di applicazione del blocco if. Utilizzando una singola istruzione var nella parte superiore della funzione aiuta ad evitare questo cavillo di Javascript, che non è sempre così evidente come il precedente, e sarebbe inaspettato per C / C # / programmatori Java.

Sì, significa che si dichiarano tutte le variabili all'inizio della funzione. Sia che tu voglia di farlo in una o più linee è una questione di scelta.

Il motivo è spiegato nel paragrafo che lei ha citato. variabili JavaScript hanno solo ambito a livello di funzione. Se si dichiara la stessa variabile all'interno di un if / mentre / per il blocco, verrà sovrascritto dal nuovo valore dal momento che il blocco non porta un nuovo ambito. Questo è diverso da linguaggi come Java. Per evitare tali sorprese, dichiarare tutte le variabili che si intende utilizzare nella funzione all'inizio della funzione in modo che non si accidentalmente 'ridichiarare' andything.

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