2009-06-02 13 views
32

दो सवाल:setInterval/setTimeout वापसी मान

  1. कैसे मूल्य setInterval और setTimeout से दिया जाता है की गणना (लोगों टाइमर स्पष्ट करने के लिए प्रयोग किया जाता है)?

  2. क्या दोनों कार्यों के लिए रनटाइम के दौरान समान मूल्य वापस करना संभव है? उदाहरण के लिए:

    var a = setInterval(fn1, 1000);
    var b = setTimeout(fn2, 1000);

क्या यह संभव है a और b के लिए एक ही मूल्य है के लिए?

पहला व्यक्ति मेरे ज्ञान के लिए अधिक प्रश्न है, लेकिन दूसरा एक और महत्वपूर्ण है।

उत्तर

32

Returns a value which can be used to cancel the timer. तो, यह संभव नहीं दिखता प्रतीत होता है कि वे समान मान (जब तक कि वे पुन: उपयोग मूल्य हैं और टाइमर में से एक पहले से ही रद्द कर दिया गया)

Mozilla states it's DOM level 0, but not part of the specification.

(पृष्ठ के तल पर देखने के लिए)

मैं एक और भी बेहतर संदर्भ मिल गया है:

Nabble का कहना है:

setTimeout और setInterval इधर-उधर कर रहे हैं एम मूल जावास्क्रिप्ट विनिर्देश, प्री-ईसीएमए। यह विनिर्देश आधिकारिक रूप से कहीं भी मानकीकृत नहीं है, लेकिन यह सभी वेब ब्राउज़र और जावास्क्रिप्ट भाषा के अधिकांश कार्यान्वयन द्वारा समर्थित है। ( एक्शनस्क्रिप्ट सहित)

प्री-ईसीएमए चश्मा अक्सर "डोम -0" एपीआई के रूप में जाना जाता है। चूंकि उनके पास पहले कभी मानकीकृत नहीं किया गया है, एचटीएमएल 5 के लिए अंततः को गैर-बहिष्कृत एपीआई में गैर-बहिष्कृत एपीआई को एक सतत वातावरण ब्राउज़र में प्रदान करने के लिए समझ में आता है। विशेष रूप से जब हालिया घटनाओं ने साबित कर दिया है कि ऐसी कंपनियां हैं जो मानक के पत्र को लागू करना पसंद करते हैं, लेकिन आत्मा नहीं।

मूल कल्पना here पढ़ें, या Sun (जो जावास्क्रिप्ट का एक प्रारंभिक प्रचारक था) से।

+0

+1 (बेहतर अगर यह एमडीसी था :) –

+0

हेहे एनवीएम, इसे देखें जोड़ा गया था। –

+0

मेरी इच्छा है कि मैं दो स्वीकृत उत्तरों चुन सकूं। संदर्भों के लिए धन्यवाद! – aditya

2

मोज़िला वेबसाइट से:

intervalID एक अनूठा अंतराल आईडी आप clearInterval को पारित कर सकते हैं है()।

तो यह :)

+1

यह एकाधिक सेट इंटरवल कॉल से लौटाए गए मानों के संबंध में अद्वितीय हो सकता है, लेकिन यह सेटटाइमआउट द्वारा दिए गए मानों के संबंध में विशिष्टता की गारंटी नहीं देता है। –

+0

"क्या दोनों कार्यों के लिए रनटाइम के दौरान समान मूल्य वापस करना संभव है?" - तो आह नहीं, वे अद्वितीय हैं :) – Ropstah

6

मुझे लगता है कि यह एक Standarized व्यवहार नहीं है अद्वितीय है। फ़ायरफ़ॉक्स में, यह केवल पूर्णांक है, setTimeout या setInterval की प्रत्येक कॉल पर बढ़ रहा है। और, नहीं, उनके पास एक ही मूल्य नहीं हो सकता है।

+0

वे * कभी वैल्यू नहीं होंगे? भले ही स्क्रिप्ट कितनी देर तक चलती है? – aditya

+1

यह सटीक पृष्ठभूमि के लिए मेरे उत्तर को देखने के लायक है कि यह किस प्रकार समर्थित है और क्या यह "spec में" है या नहीं। – cgp

+0

@aditya मुझे लगता है कि यह जांचता है कि क्या आईडी उत्पन्न करता है, स्मृति में पहले से मौजूद है, और दुर्लभ मामले में एक नया उत्पन्न करता है जो यह अस्तित्व में है। यादृच्छिक संख्याओं से निपटने के दौरान मैं यही करूँगा। साइट रेफरी के लिए –

1

चाहे वे समान मान प्राप्त कर सकें जावास्क्रिप्ट कार्यान्वयन पर निर्भर करता है। जैसा कि मासीज ने फ़ायरफ़ॉक्स में उल्लेख किया है, वही काउंटर का उपयोग करने के समान मूल्य नहीं हो सकता है। हालांकि, यह अन्य ब्राउज़रों में अलग हो सकता है, इसलिए संभव है कि उन पर भरोसा न करें, कभी भी वही मूल्य न हो।

31

ओपेरा 9, सफारी 3, Firefox 3 और आईई 7.

के तहत इस परीक्षण वापस लौटाए गए सभी पूर्णांक मूल्यों 1 से शुरू करके और फिर setTimeOut() और setInterval() की प्रत्येक कॉल के 1 से incrementing। हालांकि, मैंने देखा है कि ब्राउज़रों काउंटर शुरू कर दिया है और उन्हें अलग ढंग से संभाला:

  • आईई एक (प्रतीत होता है) यादृच्छिक 6 अंक की संख्या के साथ शुरू किया, लेकिन या तो कार्य करने के लिए आगामी कॉल इस संख्या बढ़ती। आईई को बंद करने और फिर से खोलने के बाद मैंने पाया कि प्रारंभिक संख्या यादृच्छिक रूप से जेनरेट की गई थी, क्योंकि यह पिछले सत्र की गिनती के करीब कहीं नहीं थी।
  • ओपेरा ने प्रत्येक टैब के लिए काउंटर बनाए रखा - एक टैब बंद करना और एक नया खोलने से नए टैब में 1 से काउंटर शुरू हुआ।
  • सफारी में, गिनती वैश्विक थी - एक नया टैब खोलना और विभिन्न टैबों में फ़ंक्शंस को कॉल करना वैश्विक संदर्भ काउंटर में वृद्धि करना प्रतीत होता था।
  • फ़ायरफ़ॉक्स में, काउंटर 2 से शुरू हुआ, और प्रत्येक बाद के कॉल पर किसी भी समारोह में वृद्धि हुई। ओपेरा की तरह, प्रत्येक टैब का अपना काउंटर मूल्य था, पर वे दिखाई दिया सब हालांकि पर 2.

सूचना शुरू करने के लिए, कि सभी स्थितियों में, कोई भी दो पहचानकर्ता (कम से कम एक ही टैब में) एक ही हैं।

+9

मैं यह जानने की उम्मीद कर रहा था कि वापस लौटाया गया मूल्य हमेशा सत्य है, और ऐसा लगता है कि यह मामला निर्दिष्ट नहीं है। उन सभी ब्राउज़रों पर जांच के लिए धन्यवाद। – w00t

1

यह मुझे लगता है कि लौटाया गया मूल्य उनके द्वारा रखे गए टाइमर/अंतराल की आंतरिक रूप से रखी गई सूची के लिए सूचकांक मूल्य है।

बिंदु के रूप में, मैंने स्पष्ट अंतराल (var_returned_from_set) के बजाय clearInterval (18) कहा और यह वांछित टाइमर/अंतराल को रोक दिया। (परीक्षण एफएफ 17.0.1 और आईई 9.0.8)

इसके अलावा अपने स्वयं के परीक्षण में वे दोनों ब्राउज़रों के लिए पृष्ठ के जीवनकाल के लिए अद्वितीय दिखाई देते हैं।

संबंधित मुद्दे