इसके बारे में इस तरह लगता है:
इस प्रयास करें?
बेशक यह 3 होगा, क्योंकि फूर लूप 1000 * एन एमएस के समय से पहले समाप्त हो गया था।
क्रम में 1,2,3 मुद्रित करने के लिए आप निम्न की आवश्यकता होगी:
for (var count = 0; count < 3; count++) {
do_alert(num);
}
function do_alert(num) {
setTimeout(function() {
alert("Count = " + num);
}, 1000 * num);
}
एक अलग दृष्टिकोण यह एक closure function
(JavaScript closures vs. anonymous functions में अच्छी तरह से समझाया गया है) बनाने के लिए
for (var count = 0; count < 3; count++) {
(function(num){setTimeout(function() {
alert("Count = " + num);
}, 1000 * num)})(count);
}
इन है दो कोड नमूने वास्तव में समान रूप से काम करेंगे।
पहला नमूना प्रत्येक पुनरावृत्ति नामित फ़ंक्शन (do_alert) को कॉल करता है।
दूसरा नमूना क्लोजर अज्ञात फ़ंक्शन (जो कि do_alert
जैसा है) प्रत्येक पुनरावृत्ति को कॉल करता है।
यह सब स्कोप का मामला है।
उम्मीद है कि मदद करता है।
के संभावित डुप्लिकेट [पासिंग एक लूप में सेटटाइम सेट करने के लिए फ़ंक्शन: हमेशा अंतिम मान?] (http://stackoverflow.com/questions/6425062/passing-functions-to-settimeout-in-a-loop-always-the-last-value) – Quentin