2013-07-21 14 views
7

JSLint mi dà l'errore "violazione severa", anche se io uso il contesto "questo" all'interno di una funzione che lo nasconde dall'ambito globale.Perché JSLint fornisce un severo errore di violazione su questa funzione?

function test() { 
    "use strict"; 
    this.a = "b"; 
} 

Per la cronologia, utilizzo il parser JSLint incorporato in Webstorm.

+0

Quando si incolla questo codice in JSLint.com, tutte le opzioni predefinite, non viene visualizzato un errore. Qual è stato il contesto dell'errore in cui è stato rimosso il nome della funzione? – ruffin

+0

Sto usando Webstorm che forse ha una versione obsoleta di JSLint –

+0

Qualche possibilità che tu abbia due funzioni chiamate (l'equivalente di) 'test' (nel tuo codice live)? Quindi cambiare il caso li renderebbe diversi. – ruffin

risposta

10

Questo perché JSLint non riconosce la funzione come costruttore. Per convenzione, è necessario utilizzare lettere maiuscole.

function Test() { 
    "use strict"; 
    this.a = "b"; 
} 
+4

Si potrebbe guardare http://jshint.com. Offre più controllo, piuttosto che bloccarti in opzioni controllate da Crockford piuttosto che dalle specifiche. Il problema che hai incontrato anche con i non-costruttori, se stai dichiarando le funzioni che stai per mettere su un oggetto come metodi. (Ad esempio, se dopo il tuo 'function test() {...}' hai avuto 'obj.test = test; 'così hai finito con una funzione con un nome proprio sulla proprietà' test', ma senza usare un espressione di funzione con nome a causa dei problemi che IE ha con loro). –