2012-03-19 25 views
30

Stavo usando JSLint e ho ricevuto un errore nel mettere uno spazio dopo il nome della funzione. Perché è così male?Spazio dopo il nome della funzione è sbagliato?

function coolness() { 
    var hi = "this"; 
} 

ERRORE: Problema alla linea 1 carattere. 19: spazio imprevisto tra 'freddo' e '('

+0

È una cosa negativa perché un certo anziano infelice era di cattivo umore quando ha scritto jslint, come lo sarà sempre se continui a usarlo. –

+0

Le convenzioni aiutano a mantenere il codice più leggibile. La coerenza tra molte di tali funzioni è essenziale. – Gherman

risposta

38

JSLint non è una sintassi checker Javascript tanto quanto lo è un correttore stile Javascript. Le linee guida di stile che usa sono quelle scritte da Douglas Crockford.

Alcune persone non sono d'accordo con le sue decisioni di stile, alcune persone lo fanno. Non sono legge e non è necessario seguirli. Esistono cascami JS alternativi come JSHint.

La regola particolare si esegue in è :

There should be no space between the name of a function and the (left parenthesis) of its parameter list.

Javascript non è uno spazio sensibile. Puoi aggiungere questo spazio se ti fa sentire meglio. (Non è standard, tuttavia.)

+0

Oh ok bene. Grazie per l'info! – supercoolville

10

prega di verificare i convetions codice javascript muggito e troverete la risposta

http://crockford.com/javascript/code.html#function

There should be no space between the name of a function and the ((left parenthesis) of its parameter list. There should be one space between the) (right parenthesis) and the { (left curly brace) that begins the statement body. The body itself is indented four spaces. The } (right curly brace) is aligned with the line containing the beginning of the declaration of the function.

.

Esempio per funzione:

function outer(c, d) { 
    var e = c * d; 

    function inner(a, b) { 
     return (e * a) + b; 
    } 

    return inner(0, 1); 
} 

Esempio per funzione anonima:

div.onclick = function (e) { 
    return false; 
}; 
+0

un esempio per la tua spiegazione sarebbe buono :) – yashhy

+0

@yashhy molto bene compagno :) –

2

Tecnicamente parlando, il codice è perfettamente valido, anche se alcuni standard di stile del codice dettano che non dovrebbe esserci spazio (ad esempio, quello citato da @Bodgan).

Infatti, quando si comprime il codice (utilizzando uno dei molti strumenti come YUI Compressor o Google Closure Compiler) questi spazi vengono completamente rimossi, compresi quelli prima/dopo parentesi graffe come citato da @Bodgan. Ed è certamente JS, ovviamente.

42

According to Crockford,

Per nome funzioni, non inserire spazio tra nome della funzione e parentesi:

function doStuff() { 
    //stuff here 
} 

Per anonimi funzioni, DO spazio di inserimento tra le function parola chiave e parentesi:

function() { 
    //stuff here 
} 
+20

IMHO (e Crockford's) questo rende più facile distinguere i due tipi di funzione.Penso che attenersi alle regole di Crockford anche dove non sarebbe naturalmente una buona idea, perché sono coerenti e validabili usando JSLint. Sono la regola di stile del codice de-facto per Javascript. A meno che tu non abbia una buona ragione per usare qualcosa di diverso, non lo farei. (E non essere d'accordo con Crockford perché hai sempre codificato un altro modo non è una buona ragione) – rjmunro

+3

@rjmunro +1 - per il commento. Attualmente è l'unico posto sulla pagina che "spiega PERCHÉ è cattivo" (senza ripetere semplicemente dogmaticamente le regole della convenzione). –

+1

Posso distinguerli. Vale la pena aggiungere una regola speciale per il caso? Io non la penso così, FWIW, la libreria d3.js rompe il suggerimento di Crockford, che per me va bene. –

Problemi correlati