2016-02-13 8 views
5

जब मैं कुछ इस तरह करते हैं:क्या जावास्क्रिप्ट में संचालन के निष्पादन का आदेश हर समय समान होने की गारंटी है?

var x = 5; 
console.log(  x + (x += 10) ); //(B) LOGS 10, X == 20 
console.log( (x += 10) + x  ); //(A) LOGS 0, X == 30 

(ए) और (बी) के बीच दिए गए मान में अंतर समय यह मूल्यांकन किया जाता हो जाता है पर x का मूल्य द्वारा समझाया गया है। मैं समझ है कि इस तरह मंच के पीछे कुछ होना चाहिए:

 TIME ----> 
(A)   (x = 5) + (x += 10 = 15) = 20 
(B) (x += 10 == 15) + (x == 15)  = 30 

लेकिन यह केवल सच है अगर और सिर्फ़ अगर x ही बाएँ-से-सही आदेश है कि यह लिखा गया था में मूल्यांकन किया जाता है।

तो, मैं इस बारे में कुछ प्रश्न हैं,

इस गारंटी सभी जावास्क्रिप्ट कार्यान्वयन के लिए सही हो सकता है?

क्या यह मानक द्वारा इस तरह से परिभाषित किया गया है?

या, क्या यह जावास्क्रिप्ट दुनिया में अपरिभाषित व्यवहार है?

अंत में, एक ही विचार कॉल कार्य करने के लिए लागू किया जा सकता,

var x = 5; 
console.log(x += 5, x += 5, x += 5, x += 5); // LOGS 10, 15, 20, 25 

उन्होंने यह भी दिखाई देते हैं क्रम में मूल्यांकन किया जाना है, लेकिन वहाँ एक मजबूत गारंटी नहीं है कि यह हमेशा होना चाहिए है?

+0

क्या यह मदद करता है, या आपका प्रश्न विशेष रूप से केवल ऑपरेटर निष्पादन आदेश के बारे में पूछ रहा है? http://stackoverflow.com/questions/14863430/does-javascript-have-undefined-behaviour –

+0

मैं विशेष रूप से गारंटी/अनुमानित निष्पादन आदेश के बारे में पूछ रहा हूं। लेकिन वह एक अच्छा संसाधन था, उन चीजों के बारे में नहीं पता था। धन्यवाद। – almosnow

+1

मेरा मानना ​​है कि इसे किसी भी प्रश्न को साफ़ करना चाहिए https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Operator_Precedence – Hogan

उत्तर

1

क्या यह सभी जावास्क्रिप्ट कार्यान्वयन के लिए सच होने की गारंटी है?

हां।

क्या यह मानक द्वारा इस तरह से परिभाषित किया गया है?

हां, आप इसे स्वयं here पढ़ सकते हैं।

विशेष रूप से, runtime semantics: evaluation of the addition operator (+) निर्दिष्ट करें कि बाएं अभिव्यक्ति का सही अभिव्यक्ति से पहले मूल्यांकन किया गया है।

यह evaluation of argument lists के लिए समान है।

या, क्या यह जावास्क्रिप्ट दुनिया में किसी प्रकार का अपरिभाषित व्यवहार है?

हाँ, there is undefined behaviour जावास्क्रिप्ट में, लेकिन यहां नहीं।

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