2012-03-30 3 views
5

In che modo il secondo parametro restituisce true?Perché questo ciclo "for (;;)"?

ATTENZIONE: sarà ciclo all'infinito e potrebbe andare in crash il browser

for(;;){ 
    //... 
} 

ero totalmente aspettavo di non anello a tutti ...

Ma è in esecuzione, e questo lo rende peggiore poiché può essere eseguito solo se qualcosa valutato a true o mi manca qualcosa?

+3

Se non viene fornita alcuna condizione, viene eseguito un ciclo for finché non si interrompe. È lo stesso in C. –

+0

Vedere http://stackoverflow.com/questions/4894120/special-for-loop-syntax/4894256#4894256 - lo stesso in Java e JavaScript come in C e C++. – paxdiablo

risposta

7

Da forMDN

for ([initialization]; [condition]; [final-expression]) 
    statement 

[Initialization] e [final-expression] non sono richiesti intuitivamente, riducendo il costrutto di un semplice while ciclo. Ma la parte rilevante è:

condizione
Un'espressione da valutare prima di ogni iterazione del ciclo. Se questa espressione è true, viene eseguita un'istruzione. Questo test condizionale è facoltativo. Se omesso, la condizione viene sempre valutata come vera. Se l'espressione restituisce false, l'esecuzione salta alla prima espressione che segue il costrutto for.

(sottolineatura mia)

Questa sembra essere una decisione del tutto arbitraria JS progettazione del linguaggio. Se fosse la mia lingua, probabilmente genererei un errore di sintassi.


Su un lato nota ludica, for(;;){} è equivalente a while(true){}, e sembra essere 4 caratteri più breve. Mi chiedo se i minificatori sfruttino questo!

+0

buon riferimento, mi fido totalmente di ogni parola di quel sito – ajax333221

4

Poiché la mancanza di una condizione sarà sempre valida.

+0

Davvero? È una specie di hokey. È così che funziona ovunque in Java? Come in 'if()'? –

+0

@RobertHarvey, la sintassi impedisce 'if()' di non avere una condizione, ma non impedisce 'for()'. – rid

1

Non c'è niente "che restituisce il secondo parametro true". Non c'è un secondo parametro. Sezione 12.6.3 del ECMAScript Language Specification (ECMA-262 5th Edition) dice questo:

a. Se è presente la prima Expression, quindi

i. Lascia che testExprRef sia il risultato della valutazione della prima Expression.

ii. Se GetValue (testExprRef) è falsa, ritorno (normal, V, empty).

La “prima Expression” si riferisce a è l'espressione opzionale tra le virgole della dichiarazione for. Se è presente, il programma esegue i punti (i) e (ii) citati sopra. Se l'espressione non è presente, il programma semplicemente non esegue i passaggi (i) e (ii) dell'algoritmo di dichiarazione for.