मैं सिर्फ एक चीज को लेकर उत्सुक हूं। जावास्क्रिप्ट में एक छोटा सा उदाहरण

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

var b = 1;
b = ++b;
console.log(b); // 2

var c = 1;
c += 1;
console.log(c); //2

मैं समझता हूं कि यह b और c के मामले में इस तरह क्यों काम करता है, लेकिन a के बारे में क्या? सबसे पहले कोड एक असाइनमेंट a = a बनाता है, मान वास्तव में वही रहता है, लेकिन फिर इसे (जैसा कि मैं देखता हूं) प्रति यूनिट वृद्धि और मूल्य बढ़ाना चाहिए a। लेकिन ऐसा नहीं हो रहा है. क्यों?

2
Heidel 29 मार्च 2018, 10:40

9 जवाब

सबसे बढ़िया उत्तर
var a = 1;
a = a++;
  1. 1 को a को सौंपा गया है
  2. a++ का मूल्यांकन 1 के रूप में किया जाता है
  3. a++ वेतन वृद्धि a से 2
  4. a = {result of previous evaluation}, 1 को a को असाइन करता है, इसलिए यह 1 फिर से है
var b = 1;
b = ++b;
  1. 1 को b को सौंपा गया है
  2. ++b वृद्धि b से 2
  3. ++b का मूल्यांकन 2 के रूप में किया जाता है
  4. b = {result of previous evaluation}, 2 को b को असाइन करता है, इसलिए यह 2 अभी भी है
7
Quentin 29 मार्च 2018, 07:47
var a = 1;
// Here a++ means a = a; then a = a + 1

a = a++; // so you are assign first step value inside a so thats way a = 1

console.log(a); // 1

इसका मतलब है कि आप उस समय मूल्य संग्रहित कर रहे हैं जब ए ++ ए = ए के बराबर है। आप बस a का मान निर्दिष्ट कर रहे हैं और मान को बदल रहे हैं।

1
Pankaj Bisht 29 मार्च 2018, 07:49

a का 1 का रिटर्न मान अस्थायी रूप से मूल्यांकन के लिए संग्रहीत किया जाता है, फिर वृद्धि होती है, a में अब 2 का मान होता है और फिर पूर्व संग्रहीत की assingmet मूल्य होता है।

a = a++;

एक ही है

a = (temp = a, a++, temp);
1
Nina Scholz 29 मार्च 2018, 07:47

पोस्टफ़िक्स ऑपरेटर a का मूल मान देता है। तो a को पोस्टफिक्स ++ ऑपरेटर द्वारा बढ़ा दिया जाता है लेकिन फिर ऑपरेटर के रिटर्न वैल्यू को निर्दिष्ट करके ओवरराइट कर दिया जाता है, जो कि वेतन वृद्धि से पहले का मान है।

1
CannedMoose 29 मार्च 2018, 07:45

a= a++ वृद्धि से पहले के मान का पिछला मान लौटाएं।

आप बस a++ का उपयोग कर सकते हैं

2
Towkir 2 मई 2019, 17:06

a++ वह मान लौटाता है जो पहले स्वतः वृद्धि; जबकि ++a वह मान देता है जो के बाद आत्म-वृद्धि करता है;

इसलिए जब आप a = a++ को कॉल करते हैं, तो a 1 के बराबर होता है;

2
Hank X 29 मार्च 2018, 07:47

यह ठीक है कि जावास्क्रिप्ट कैसे काम करता है। a++ के मामले में वापसी मूल्य वास्तव में मूल मूल्य है। आपने मूल मान a को फिर से असाइन किया है।

2
Andrew 29 मार्च 2018, 07:44

इस प्रकार इंक्रीमेंट के बाद काम करता है

यदि ऑपरेंड के बाद ऑपरेटर के साथ पोस्टफ़िक्स का उपयोग किया जाता है (उदाहरण के लिए, x++), तो यह वेतन वृद्धि से पहले मान लौटाता है।

ए = ए ++;

जब ए ++ निष्पादित करता है तो 2 होता है और अभिव्यक्ति 1 लौटाती है और 1 को असाइन किया जाता है।

यही कारण है कि आप वेतन वृद्धि से पहले मूल्य देख रहे हैं।

ध्यान दें कि यदि आप वापस असाइन नहीं करते हैं, तो आपको a का बढ़ा हुआ मान दिखाई देता है। संक्षेप में आप इसे वापस असाइन करके यहां वृद्धिशील मान को ओवरराइड कर रहे हैं।

var a = 1;
a++;
console.log(a); // 1
3
Suresh Atta 29 मार्च 2018, 07:52

यह अफवाह है कि ++a निष्पादित करने के लिए, स्मृति में मान बढ़ जाता है और फिर वापस आ जाता है। जबकि a++ के लिए, पहले मान बनाए गए अस्थायी चर में संग्रहीत किया जाता है, फिर प्राथमिक चर का मान बढ़ाया जाता है और अस्थायी चर का मान वापस किया जाता है - इस प्रकार अस्थायी चर वृद्धि बनाने के लिए "व्यय"।

3
Zohid 29 मार्च 2018, 07:46