2011-09-15 16 views
22

Perché JSLint si lamenta se qualcosa utilizza una funzione che non è già stata definita? Il punto è che la funzione è definita - e se quel qualcosa chiama quella funzione, quella funzione esiste e le cose funzioneranno.Errore jsLint: "prima che fosse definita una funzione somefunction()"

Date un'occhiata al codice qui sotto:

function foo() 
{ 
    // calls bar() 
}; 

function bar() 
{ 
    // calls foo() 
}; 

Non c'è modo di organizzare i 2 metodi in modo tale che renderebbe JSLint felice. Come gestisco questo problema?

risposta

13

Vai a questa risposta:

Contending with JS "used before defined" and Titanium Developer

In sostanza, se si utilizza il modulo foo = function() { ... }, è possibile dichiarare var foo, bar; in alto per evitare gli errori JSLint.

+5

Ma questo è un po 'diverso da 'function foo()', essendo espressione di funzione e tutto. Inoltre, dichiarare che 'var foo, bar' in alto è superfluo a causa del sollevamento. Quindi, in breve, 'var foo = function() ..., var bar = function() ...' funzionerà bene tecnicamente. Inoltre, penso, considerando che le dichiarazioni di funzione sono caricate prima di qualsiasi altra cosa - JSLint dovrebbe già aggiustare le loro cose. – ZenMaster

+8

@ZenMaster: un fork di 'jslint', [' jsHint'] (http://www.jshint.com/docs/), ha risolto il problema impostando '' latedef ': false' nelle opzioni. (Non influenza i nomi delle variabili, solo i nomi delle funzioni.) –

+1

Questa risposta interromperà il codice che si basa sulla funzione di sollevamento della funzione ~ –

15

JSLint non può gestire questo aspetto per quanto ne so, ma JSHint, basato su JSLint, affronta questo problema in modo corretto.

Basta usare la proprietà "latedef" e impostarlo su "false". Nel caso in cui si desideri comunque rilevare questo tipo di definizioni di variabili problematiche, ma si desidera utilizzare le espressioni di funzione e consentire il sollevamento di queste funzioni, è possibile impostare "latedef": "nofunc".

Check it out here.

+0

Una nota: il valore "nofunc" per l'opzione "latedef" aiuta a evitare l'ispezione per le dichiarazioni di funzione (non espressioni). – Alexei

Problemi correlati