2012-03-30 14 views
5

दुनिया में क्या दूसरा पैरामीटर true लौटा रहा है?यह '(;;)' loops के लिए क्यों है?

चेतावनी: यह पाश असीम और अपने ब्राउज़र को नष्ट होगा सकता है

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

मैं पूरी तरह नहीं पाश पर सभी के लिए उम्मीद कर रहा था ...

लेकिन यह चल रहा है, और इससे यह खराब हो जाता है क्योंकि यह केवल true पर मूल्यांकन किए जाने पर ही चल रहा है, या क्या मुझे कुछ याद आ रहा है?

+3

यदि कोई शर्त नहीं दी जाती है, तो लूप तब तक चलता है जब तक आप इसे से बाहर नहीं निकाल देते। यह सी –

+0

में समान है http://stackoverflow.com/questions/4894120/special-for-loop-syntax/4894256#4894256 - जावा और जावास्क्रिप्ट में वही है जैसा कि यह सी और सी ++ में है। – paxdiablo

उत्तर

7

forMDN से

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

[Initialization] और [final-expression] intuitively की आवश्यकता नहीं है, एक साधारण while पाश करने के लिए निर्माण को कम करने। लेकिन प्रासंगिक हिस्सा है:

हालत
कोई व्यंजक प्रत्येक पाश यात्रा से पहले मूल्यांकन किया जाना। यदि यह अभिव्यक्ति सत्य पर मूल्यांकन करती है, तो कथन निष्पादित किया जाता है। यह सशर्त परीक्षण वैकल्पिक है। अगर छोड़ा जाता है, तो स्थिति हमेशा सत्य का मूल्यांकन करती है। यदि अभिव्यक्ति झूठी मूल्यांकन करती है, तो निष्पादन निर्माण के बाद पहली अभिव्यक्ति पर छोड़ देता है।

(जोर मेरा)

यह एक पूरी तरह से मनमाने ढंग से जे एस भाषा डिजाइन निर्णय प्रतीत होता है। अगर यह मेरी भाषा थी तो मैं शायद एक वाक्यविन्यास त्रुटि फेंक दूंगा।


एक चंचल ओर टिप्पणी पर, for(;;){}while(true){} के बराबर है, और 4 अक्षर कम होता है। मुझे आश्चर्य है कि क्या मिनीफायर इसका लाभ उठाते हैं!

+0

अच्छा संदर्भ, मैं पूरी तरह से उस साइट के हर शब्द में भरोसा करता हूं – ajax333221

4

क्योंकि किसी शर्त की कमी हमेशा सत्य का मूल्यांकन करेगी।

+0

वास्तव में? वह तरह का होकी है। क्या यह जावा में हर जगह काम करता है? 'If ​​()' के रूप में? –

+0

@RobertHarvey, वाक्यविन्यास 'if() 'को कोई शर्त नहीं होने से रोकता है, लेकिन यह'() 'को रोकता नहीं है। – rid

1

कुछ भी नहीं है "दूसरा पैरामीटर वापसी true"। कोई दूसरा पैरामीटर नहीं है। ECMAScript Language Specification (ECMA-262 5th Edition) की धारा 12.6.3 यह कहती है:

ए। यदि पहले अभिव्यक्ति मौजूद है, तो

i। testExprRef पहले अभिव्यक्ति का मूल्यांकन करने का परिणाम बनें।

ii। यदि getValue (testExprRef) झूठी, वापसी (normal, वी, empty) है।

"पहले अभिव्यक्ति" यह जिक्र है for बयान के अर्धविराम के बीच वैकल्पिक अभिव्यक्ति है। यदि यह मौजूद है, तो कार्यक्रम ऊपर उद्धृत चरणों (i) और (ii) करता है। अगर अभिव्यक्ति मौजूद नहीं है, तो प्रोग्राम for कथन एल्गोरिदम के चरणों (i) और (ii) को निष्पादित नहीं करता है।

संबंधित मुद्दे