سؤال

سؤالين:

  1. كيف يتم إرجاع القيمة من setInterval و setTimeout (تلك المستخدمة لمسح المؤقتات) المحسوبة؟

  2. هل من الممكن أن تعيد كل من الوظائف نفس القيمة أثناء وقت التشغيل؟ علي سبيل المثال:

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

هل من الممكن a و b أن يكون لها نفس القيمة؟

أول واحد هو أكثر من سؤال المعرفي، ولكن الثاني هو أكثر أهمية.

هل كانت مفيدة؟

المحلول

إرجاع قيمة يمكن استخدامها لإلغاء الموقت. لذلك، يبدو أنه من غير المرجح أن يعيد نفس القيمة (ما لم يتم إعادة استخدام القيم وإعادة إلغاء واحدة من أجهزة ضبط الوقت)

Mozilla تنص على مستوى دوم 0، ولكن ليس جزءا من المواصفات. (انظر إلى أسفل الصفحة)

لدي مرجع أفضل:

nabble. يقول:

Settimeout و SetInterval هي من مواصفات جافا سكريبت الأصلية، قبل ECMA. هذه المواصفات ليست موحدة رسميا في أي مكان، ولكنها مدعومة من جميع متصفحات الويب ومعظم تطبيقات لغة الجافا سكريبت. (بما في ذلك ActionScript.)

غالبا ما تعرف مواصفات ما قبل ECMA باسم واجهات برمجة التطبيقات "DOM-0". نظرا لأنهم لم يتم توحيدهم من قبل، فمن المنطقي أن يقوم HTML5 أخيرا المواصفات بآلام برمجة التطبيقات غير المهمية في محاولة لتوفير بيئة ثابتة عبر المتصفحات. خاصة عندما أثبتت الأحداث الأخيرة أن هناك شركات ترغب في تنفيذ خطاب المعيار، ولكن ليس الروح.

قراءة المواصفات الأصلية هنا, ، او من الشمس (من كان مساءات جافا سكريبت).

نصائح أخرى

اختبار هذا تحت Opera 9، Safari 3، Firefox 3 و IE 7.

جميع القيم الصحيحة عادت جميعها، بدءا من 1 ثم زيادة بنسبة 1 لكل مكالمة setTimeOut() و setInterval(). وبعد ومع ذلك، لاحظت أن المتصفحات بدأت العدادات ومعالجتها بشكل مختلف:

  • IE قد بدأ برقم عشوائي ذو 6 أرقام (على ما يبدو)، ولكن المكالمات اللاحقة لإدراك الوظيفة زيادة هذا الرقم. بعد إغلاق وإعادة فتح IE، وجدت أن رقم البداية يبدو أن يتم إنشاؤه بشكل عشوائي، لأنه لم يكن في أي مكان بالقرب من الدورة السابقة.
  • حافظت أوبرا على عداد لكل علامة تبويب - إغلاق علامة تبويب وفتح واحدة جديدة بدأت العداد من 1 في علامة التبويب جديدة.
  • في رحلات السفاري، كان العد العالمي - يفتح علامة تبويب جديدة وتبدو الوظائف في علامات تبويب مختلفة لزيادة عداد مرجعي عالمي.
  • في فايرفوكس، ظهر العداد يبدأ في 2، وزيادة كل مكالمة لاحقة إلى الوظيفة. مثل Opera، تحتوي كل علامة تبويب على قيمة عدادية خاصة بها، لكنها بدا أنهم يبدأوا جميعا في 2.

إشعار على الرغم من أنه في جميع السيناريوهات، لا يوجد معرفان (على الأقل في نفس علامة التبويب) هي نفسها.

أعتقد أنه ليس سلوكا متفرقا. في فايرفوكس، إنه مجرد عدد صحيح، وتزيد على كل مكالمة setTimeout أو setInterval. وبعد ولا، لا يمكن أن يكون لديهم نفس القيمة.

من موقع موزيلا:

التدخل هو معرف فاصل فريد يمكنك تمريره إلى Clearterval ().

لذلك فهي فريدة من نوعها :)

ما إذا كان يمكن أن يكون لها نفس القيمة تعتمد على تطبيق JavaScript. كما maciej المذكورة في فايرفوكس لا يمكن أن يكون لها نفس القيمة كما يتم استخدام نفس العداد. ومع ذلك، قد يكون ذلك مختلفا في المتصفحات الأخرى، لذلك ربما لا يعتمد عليها أبدا نفس القيمة.

يبدو لي أن القيمة التي تم إرجاعها هي قيمة الفهرس لأي قائمة تم الحفاظ عليها داخليا من الموقتات / الفواصل الزمنية التي يحتفظ بها.

كما في النقطة، اتصلت باللياليشرفال (18) بدلا من clearinterval (var_returret_from_set) وأوقفت المؤقت / الفاصل الزمني المطلوب. (اختبار FF17.0.1 و IE9.0.8)

أيضا في الاختبارات الخاصة بي تبدو فريدة من نوعها لمدى عمر الصفحة لكلا المتصفحات.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top