javascript - Calling functions with setTimeout() -


बस डालें ...

क्यों करता है

  setTimeout ( 'प्लेनोट (' + presentaudio.id + ',' + नोटटाइम + ')', देरी);  

फ़ंक्शन को निर्दिष्ट विलंब के बाद कॉल करने से पूरी तरह से कार्य करता है, लेकिन

  setTimeout (प्लेनोट (वर्तमानऑडियो।, नोटटाइम), देरी);  

एक ही समय में फ़ंक्शन प्लेनोट को कॉल करता है?

(इन सेटटिमेउट () s में लूप में हैं)

या, अगर मेरा विवरण पढ़ना बहुत कठिन है, दो कार्यों में क्या फर्क है?

पहला फ़ॉर्म आप सूची काम करते हैं, क्योंकि यह देरी के अंत में एक स्ट्रिंग का मूल्यांकन करेगा eval () का उपयोग करना आम तौर पर अच्छा विचार नहीं है, इसलिए आपको इसे से बचना चाहिए।

दूसरी विधि काम नहीं करती है, क्योंकि आप तुरंत । क्या हुआ समाप्त हो रहा है कि यदि playNote (...) का उपयोग करते हैं, तो प्लेनोट तुरंत निष्पादित होता है, इसलिए देरी के अंत में कुछ नहीं होगा।

इसके बजाय, आपको सेट अप करने के लिए एक अनाम फ़ंक्शन पास करना होगा, इसलिए सही प्रपत्र है:

  setTimeout (फ़ंक्शन () {playNote (currentaudio.id, noteTime)}, देरी) ;  

ध्यान दें कि आप पूरे कोड की अभिव्यक्ति setTimeout से गुजर रहे हैं, इसलिए यह गुमनाम समारोह में रखेगा और केवल देरी के अंत में इसे निष्पादित करेगा। / P>

आप किसी संदर्भ को तत्काल निष्पादित नहीं किया जा सकता है, लेकिन फिर आप तर्कों को पार नहीं कर सकते हैं:

  setTimeout एक संदर्भ, आप  setTimeout  पास कर सकते हैं (प्लेनोट, देरी);  

नोट:

दोहराव वाले ईवेंट के लिए आप का उपयोग कर सकते हैं और आप

आप कहते हैं कि आप setTimeout () में एक का उपयोग करते हैं लूप के लिए कई स्थितियों में, setTimeout () को रिकर्सिव फ़ंक्शन में उपयोग करना बेहतर होता है इसका कारण यह है कि लूप के लिए, setTimeout () में प्रयुक्त वेरिएबल्स वेरिएबल्स नहीं होंगे क्योंकि वे जब थे जब setTimeout () शुरू हुआ , लेकिन वेरिएबल के रूप में वे विलंब के बाद होते हैं जब फ़ंक्शन निकाल दिया जाता है।

बस इस पूरी समस्या को दूर करने के लिए एक रिकर्सिव फ़ंक्शन का उपयोग करें।

चर विलंब समय से निपटने के लिए पुनरावर्तन का उपयोग करना:

  // सेट करें मूल विलंब var देरी = 500; // पुनरारंभ शुरू करने के लिए, पहली बार समारोह को बुलाओ। प्लेनोट (xxx, yyy); // पुनरावृत्त समारोह फ़ंक्शन playNote (theId, theTime) {// करें जो कुछ भी करना है // ... // विलंब के बाद फ़ंक्शन को फिर से कॉल करें, यदि आवश्यक हो तो // आप उपयोग किए जाने वाले तर्क को संशोधित कर सकते हैं यहाँ। एक उदाहरण के रूप में / मैं हर समय समय के लिए 20 जोड़ें। आप / देरी को भी संशोधित कर सकते हैं। मैं एक उदाहरण के रूप में प्रत्येक बार 1/2 देरी के लिए दूसरा जोड़ता हूं। // आप पुनरावर्तन विलंब को जारी रखने या रोकने के लिए एक शर्त का उपयोग कर सकते हैं + = 500; If (condition) {setTimeout (function () {playNote (theID, theTime + 20)}, देरी); }}  

Comments