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

Popular posts from this blog

asp.net - Javascript/DOM Why is does my form not support submit()? -

sockets - Delphi: TTcpServer, connection reset when reading -

javascript - Classic ASP "ExecuteGlobal" statement acting differently on two servers -