2016-01-18 12 views
11

A partire dal 14 gennaio 2016, JSLint ha iniziato a lamentarsi delle dichiarazioni var o let che hanno più di una variabile per dichiarazione e ha creato una nuova direttiva, multivar che ignora questo nuovo "problema".Previsto ';' e invece vide ','. - Impostazione multivar JSLint

Questo è un cambiamento piuttosto significativo, come le versioni precedenti si lamentano se fatto hanno due var s nello stesso blocco di codice.

Cioè, a partire da oggi (18 gennaio 2016), questo codice ora rompe in JSLint:

/*jslint white:true, browser:true, devel:true */ 
function a(b) { 
    "use strict"; 
    var c, d; // <<< Now bad!! 
    d = "test"; 
    c = d + b; 
    console.log(c); 
} 

L'errore riportato è, Expected ';' and instead saw ','. per la linea var c,d;

La correzione "corretta" è a quanto pare questo:

/*jslint white:true, browser:true, devel:true */ 
function a(b) { 
    "use strict"; 
    var c; 
    var d; // <<< this *used* to be forbidden. 
    d = "test"; 
    c = d + b; 
    console.log(c); 
} 

si noti che questo codice appena corretto avrebbe prodotto l'errore, Error: combine_var, a 01.235..

Le uniche descrizioni per il cambiamento da Crockford che posso trovare sembrano essere this post on Google Plus:

JSLint ora ha un'opzione multivar che tollera più nomi di essere dichiarato in un unico var, lasciate, o const.

... e un rapido accenno sul website instructions ...

tollerare variabili dichiarazioni multiple per dichiarazione
multivar
true se, let o const dichiarazione var può dichiarare due o più variabili in una singola affermazione.

La modifica di multivar su JSLint.com non sembra essere ancora nel repository GitHub. Vedi i due check-in (1, 2) dal titolo "var" per il 14 gennaio. Questi due fanno in JSLint il codice seguendo il nuovo requisito, ma non aggiungere (afaict) la direttiva multivar descritta e in uso su JSLint.com.

Qualcuno può dirmi perché più linee var sono incoraggiate/richieste ora, a parte il solito, "Dovresti ignorare JSLint", le risposte? Cioè, perché era necessaria una singola var prima del (suppongo che incoraggerei una comprensione del sollevamento), e perché questo ragionamento è improvvisamente discutibile?

+0

Se avete intenzione di votare il basso e/o votare per chiudere, un commento per questo sarebbe terribilmente utile. Grazie! – ruffin

+1

Non sono sicuro del downvote, ma questo è un cambiamento molto radicale, non me lo aspettavo (soprattutto perché è disabilitato di default). –

+3

Ehi @JoshCrozier! Sì, sorpreso anche da me. Non è solo un cambiamento, come quando JSLint ci ha consigliato di smettere di usare 'for' loops di recente, è un 180 piatto rispetto a quanto richiesto in precedenza. – ruffin

risposta

2

Dalla guida di stile AirBNB.

È più semplice aggiungere nuove dichiarazioni variabili in questo modo, e non devi mai preoccuparti di scambiare a; per a, o introducendo diff di sola punteggiatura. Puoi anche esaminare ciascuna dichiarazione con il debugger, invece di analizzarli tutti insieme.

Maggiori info su questo a: https://github.com/airbnb/javascript#variables

+3

Certo, voglio dire, questo fa * senso *, ma non sono sicuro che sia * perché *. Questo è il motivo per cui ho 'WHERE 1 = 1' e quindi ogni clausola' AND' sulla sua linea quando scrivo SQL, ma la cosa strana in questo caso è che JSLint ha fatto un 180 completo su ciò che era usato non solo incoraggiare, ma * richiedere *. Una risposta completa spiegherebbe perché la convenzione è completamente cambiata (** Perché prima era necessario un singolo 'var' (immagino che incoraggi una comprensione del sollevamento), e perché questo ragionamento è improvvisamente discutibile? **), quindi +1 ma aspetterò di accettare per ora. – ruffin

+1

Non sembra che avremo una risposta migliore rapidamente. Accettando provvisoriamente questo, ma se ne ottengo uno migliore dopo, attenzione. :^P – ruffin

+0

Dopo averci pensato un po 'di più, la mia ipotesi sarebbe che fosse un modo semplice per garantire a tutti i vars in cima alla funzione. E che il cambiamento ha a che fare con il fatto che ora abbiamo 'const' e' let' questo non ha più senso. –

Problemi correlati