
كيف أبدأ بسرعة مع VUE3.0:
كنت في حيرة من أمري عندما بدأت دراسة سؤال اختبار كتابي منذ بعض الوقت. اليوم سنقوم بتحليل شامل لآلية تنفيذ الحدث لـ JS.
. أيها الأصدقاء، يمكنك محاولة كتابة أمر الطباعة.

JS أساسي كلغة برمجة نصية للمتصفح. والغرض الرئيسي من Js هو تشغيل DOM، والذي يحدد أن JS يجب أن تكون ذات ترابط واحد إذا كانت JS متعددة الخيوط مثل Java، وإذا كان هناك خيطان يعملان DOM في نفس الوقت، فيجب على المتصفح كيفية تنفيذه؟
يهدف إصدار JS في الواقع إلى الاستفادة من شعبية لغة Java التي تمت كتابتها منذ وقت ليس ببعيد، ولهذا السبب تعتبر
نظرًا لأن JS ذات ترابط واحد، يجب فرز المهام. سيتم تنفيذ جميع المهام وفقًا للقاعدة.
المهام المتزامنة
المهام غير المتزامنة

تدخل المهام المتزامنة والمهام غير المتزامنة إلى مكدس التنفيذ. ستحدد JS أولاً أن نوع المهمة
هو مهمة متزامنة. إذا دخلت إلى الخيط الرئيسي مباشرةً،
فهي مهمة غير متزامنة. أدخل Event Table وقم بتسجيل Event Queue لوظيفة رد الاتصال
بعد تنفيذ جميع المهام المتزامنة، ستدخل JS إلى Event Queue ، وتقوم وظيفة القراءة
بتنفيذ
هذه العملية بشكل متكرر حتى يتم الانتهاء من جميع المهام. هذه هي الطريقة التي نقول بها غالبًا أن事件循环
، لا أعرف. . . . يجب أن يكون لدى JS منطق فريد خاص به لتحديد ما إذا كانت حزمة التنفيذ فارغة أم لا.
تسلسل تنفيذ المهام غير المتزامنة هو: مهام الماكرو -> المهام الصغيرة
يمكن تقسيم المهام غير المتزامنة إلى
مهام ماكرو
المهام الصغيرة
I/0
setTimeout
setInterval
Promise
.then
.catch
vite مكون إضافي تم تكوينه من قبل، هناك بعض المشاكل في الإصدار، يرجى تجاهل هذا الإنذار الأحمر.

开始了متزامنة. يتم إدخاله أولاً في مكدس التنفيذ
لتنفيذ a task() . إدخال مكدس التنفيذ
غير متزامن / متزامن هو السطر الأول من التعليمات البرمجية سيتم تنفيذه بشكل متزامن. ما يلي سيكون الرمز غير متزامن. يدخل b إلى مكدس التنفيذ كمهمة متزامنة،
وتصبح a end هي المهمة الدقيقة للمهمة غير المتزامنة، وتدخل مكدس التنفيذ
حتى الآن، وقد开始了قائمة انتظار المهام المتزامنة، a ، b حتى الآن
، بدأت قائمة انتظار المهام غير المتزامنة المهام: setTimeout Microtask: a end

وهنا يأتي السؤال، ألا يعني ذلك أن المهام الكلية سيتم تنفيذها قبل المهام الصغيرة؟ لماذا تتم طباعة setTimeout بعد a end ؟
看这张图

يقوم setTimeout بإدخال قائمة انتظار المهام كمهمة ماكرو. لذا فإن السبب وراء ذلك
بشكل عام هو أن
الانتظار غير المتزامن يؤدي إلى إنشاء مهام صغيرة، لكن هذه المهمة الصغيرة تنتمي إلى مهمة الماكرو الحالية. لذلك، سيتم تنفيذ a end أولاً، وبعد التنفيذ، سيتم الحكم على أن مهمة الماكرو الحالية قد انتهت. قم بتنفيذ مهمة الماكرو التالية، واطبع setTimeout
c نظرًا لتحويل Promise، تصبح مهمة متزامنة وتدخل قائمة انتظار المهام
c end تدخل قائمة انتظار المهام كمهمة صغيرة مشتقة من
d قائمة انتظار المهام كمهمة متزامنة
a
b
c
d
هي نهاية microtask
c وmicrotask
setTimeout،
لذا فإن ترتيب الطباعة كما يلي.

قد يكون فهمي لآلية تنفيذ JS غير صحيح إلى حد ما، وآمل أن تتمكنوا من الإشارة إلى ذلك يا رفاق.
[دروس الفيديو ذات الصلة الموصى بها: الواجهة الأمامية للويب]
ما سبق هو تحليل متعمق لتفاصيل آلية تنفيذ الحدث في JS. لمزيد من المعلومات، يرجى الانتباه إلى المقالات الأخرى ذات الصلة على موقع PHP الصيني!
