ईसीएमएस्क्रिप्ट 6 के let
में कीवर्ड को सिरदर्द के बिना ब्लॉक स्कोप प्रदान करना है। क्या कुछ बता सकते हैं कि फ़ंक्शन में i
से नीचे दिए गए कोड में वर्तमान पुनरावृत्ति से मूल्य के बजाय लूप से अंतिम मान (जैसे var
) के साथ हल किया गया है?कीवर्ड को लूप
"use strict";
var things = {};
for (let i = 0; i < 3; i++) {
things["fun" + i] = function() {
console.log(i);
};
}
things["fun0"](); // prints 3
things["fun1"](); // prints 3
things["fun2"](); // prints 3
MDN
for
पाश की तरह में
let
का उपयोग कर पाश के शरीर के दायरे में चर के लिए बाध्य करना चाहिए के अनुसार
। जब मैं ब्लॉक के अंदर अस्थायी चर का उपयोग करता हूं तो चीजें काम करती हैं क्योंकि मैं उनसे अपेक्षा करता हूं। यह जरूरी क्यों है?
"use strict";
var things = {};
for (let i = 0; i < 3; i++) {
let index = i;
things["fun" + i] = function() {
console.log(index);
};
}
things["fun0"](); // prints 0
things["fun1"](); // prints 1
things["fun2"](); // prints 2
मैं Traceur और node --harmony
साथ स्क्रिप्ट का परीक्षण किया।
टीएल; डीआर: पहला कोड स्निपेट पर्यावरण के जावास्क्रिप्ट कार्यान्वयन में एक बग प्रदर्शित करता है। यही है, सही व्यवहार 3, 3 और 3 के बजाय 0, 1 और 2 आउटपुट करना है। जब आप कोड चलाते हैं तो आधुनिक ब्राउज़र सही तरीके से काम करते हैं और 0, 1 और 2 आउटपुट करते हैं। – Utku
स्पष्ट रूप से यहां तीन अलग-अलग स्कॉप्स हैं: 'x = 5 दें; के लिए (चलो एक्स = 0; एक्स <10; एक्स ++) {चलो x = 3; console.log (x); } ' – joeytwiddle