javascript - परिवर्धन असाइनमेंट+= अभिव्यक्ति में व्यवहार




language-lawyer compound-assignment (2)

निम्नलिखित नियम हैं जिनका ध्यान रखना आवश्यक है

  • संचालक वरीयता
  • परिवर्तनशील कार्य
  • अभिव्यक्ति का मूल्यांकन

    अभिव्यक्ति १

    a = 1
    b = (a += (a += a))
    
    b = (1 += (a += a))  // a = 1
    b = (1 += (1 += a))  // a = 1
    b = (1 += (1 += 1))  // a = 1
    b = (1 += (2))  // a = 2 (here assignment is -> a = 1 + 1)
    b = (3)  // a = 3 (here assignment is -> a = 1 + 2)

    अभिव्यक्ति २

    a = 1
    b = (a += a) + (a += a)
    
    b = (1 += a) + (a += a) // a = 1
    b = (1 += 1) + (a += a) // a = 1
    b = (2) + (a += a) // a = 2 (here assignment is -> a = 1 + 1)
    b = (2) + (2 += a) // a = 2 (here here a = 2)
    b = (2) + (2 += 2) // a = 2
    b = (2) + (4) // a = 4 (here assignment is -> a = 2 + 2)
    b = 6 // a = 4

    अभिव्यक्ति ३

    a = 1
    b = a += a += a += a += a
    
    b = 1 += 1 += 1 += 1 += 1 // a = 1
    b = 1 += 1 += 1 += 2 // a = 2 (here assignment is -> a = 1 + 1)
    b = 1 += 1 += 3 // a = 3 (here assignment is -> a = 1 + 2)
    b = 1 += 4 // a = 4 (here assignment is -> a = 1 + 3)
    b = 5 // a = 5 (here assignment is -> a = 1 + 4)

हाल ही में मैं इस सवाल पर आया था: असाइनमेंट ऑपरेटर श्रृंखला समझ

इस प्रश्न का उत्तर देते समय मैंने अतिरिक्त असाइनमेंट ऑपरेटर += या किसी अन्य operator= (( &= , *= , /= , आदि) के व्यवहार की अपनी समझ पर संदेह करना शुरू कर दिया।

मेरा प्रश्न यह है कि परिवर्तनशील जगह पर अद्यतन किए गए भावों में परिवर्तनशील चर कब है, ताकि मूल्यांकन के दौरान अभिव्यक्ति में अन्य स्थानों पर इसका परिवर्तित मूल्य परिलक्षित हो और इसके पीछे तर्क क्या है? कृपया निम्नलिखित दो अभिव्यक्तियों पर एक नज़र डालें:

अभिव्यक्ति १

a = 1
b = (a += (a += a))
//b = 3 is the result, but if a were updated in place then it should've been 4

अभिव्यक्ति २

a = 1
b = (a += a) + (a += a)
//b = 6 is the result, but if a is not updated in place then it should've been 4

पहली अभिव्यक्ति में, जब अंतरतम अभिव्यक्ति (a += a) का मूल्यांकन किया जाता है, तो ऐसा लगता है कि यह a मान अपडेट नहीं करता a , इस प्रकार परिणाम 4 बजाय 3 रूप में सामने आता है।

हालाँकि, दूसरी अभिव्यक्ति में, a का मान अद्यतन है और इसलिए परिणाम 6 है।

जब हमें यह मान लेना चाहिए कि अभिव्यक्ति में अन्य स्थानों पर a मूल्य परिलक्षित होगा और हमें कब नहीं करना चाहिए?


यह सिर्फ ऑप्स के ऑर्डर की विविधता का उपयोग करता है।

यदि आपको ops के आदेश की याद दिलाने की आवश्यकता है:

PEMDAS:

पी = कोष्ठक

= खर्च करने वाले

एमडी = गुणा / भाग

यथा = जोड़ / घटाव

बाकी दाएं से बाएं।

यह भिन्नता केवल बाएं से दाएं पढ़ी जाती है, लेकिन यदि आप एक कोष्ठक को इसके अंदर सब कुछ करते हुए देखते हैं, और इसे एक स्थिरांक से बदल देते हैं तो आगे बढ़ते हैं।

पहला पूर्व:

var b = (a+=(a+=a))

var b = (1+=(1+=1))

var b = (1+=2)

var b = 3

दूसरा पूर्व:

var b = (a+=a)+(a+=a)

var b = (1+=1)+(a+=a)

var b = 2 + (2+=2)

var b = 2 + 4

var b = 6

var a = 1
var b = (a += (a += a))
console.log(b);

a = 1
b = (a += a) + (a += a)
console.log(b);

a = 1
b = a += a += a;
console.log(b);

अंतिम एक b = a += a += a चूंकि कोई कोष्ठक नहीं हैं, यह स्वचालित रूप से b = 1 += 1 += 1 बन जाता है जो कि b = 3






compound-assignment