loops - JavaScript Variable Scope -
इस सवाल का पहले से ही एक उत्तर है: < 31 उत्तरों
मुझे एक समस्या आ रही है / p>
-
स्क्रिप्ट
setTimeout (function () {for (var i = 0; i & lt; 5; i ++) {SetTimeout (फ़ंक्शन () {console.log (i);}, i * 200);}}, 200);
आउटपुट
5, 5, 5, 5, 5 के बजाय 1, 2, 3, 4, 5
मैं समझ सकता हूं कि यह क्यों काम नहीं करता है, लेकिन मैं सोच रहा था कि कोई मुझे बता सकता है कि क्या हो रहा है और यह क्यों काम नहीं कर रहा है!
इसके अलावा, यह दायरा समस्या कैसे दूर हो सकती है?
setTimeout
कॉलबैक फ़ंक्शन एसिंक्रोनस को क्रियान्वित किया जाता है, सभी कंसोल .log
कॉल जिसे आप उसी i
वेरिएबल का संदर्भ देते हैं, और उस समय वे निष्पादित होते हैं, लूप समाप्त हो गया और i 4 होता है।
आप सभी
i
मानों के संदर्भ को संचित करने के लिए एक पैरामीटर स्वीकार करने वाले फ़ंक्शन के अंदर अपने अंदरूनी setTimeout
कॉल को लपेट कर सकते हैं जो इस तरह से चल रहे हैं, कुछ ऐसा है:
setTimeout (फ़ंक्शन () (के लिए (var i = 0; i & lt; 5; i ++) {(फ़ंक्शन (जे) {// जोड़ा गया 'I' के लिए संदर्भ को संचय करने के लिए बंद सेट टाइमआउट (फ़ंक्शन () {console.log (j);}, j * 200);}) (i); // स्वचालित रूप से फ़ंक्शन कॉल करता है और मान पास करता है}}, 200 );
अधिक विवरण के लिए निम्नलिखित प्रश्न का उत्तर देखें:
-
Comments
Post a Comment