مسبق الكلمة الرئيسية مع VAR
دعونا أولاً نلقي نظرة على نتائج تنفيذ هذا الرمز:
نسخة الكود كما يلي:
تنبيه (ن) ؛ // غير محدد منبثقة
var n = 10 ؛
نتيجة المنبثقة غير محددة ، لماذا لا 10؟ دعونا نلقي نظرة على نتائج تنفيذ الكود التالية:
نسخة الكود كما يلي:
تنبيه (ن) ؛
ن = 10 ؛
تقرير العملية على النحو التالي:
لماذا تقرير الخطأ هذه المرة هو أنه عند تشغيل الرمز ، لا يتم الإعلان عن المتغير n ؛ من خلال مقارنة هاتين القطعتين من الكود ، نجد أن هناك فرقًا بين المتغيرات مع الكلمات الرئيسية والمتغيرات بدون كلمات رئيسية VAR. قبل تنفيذ الكود ، يبدو أن المتصفح قد منحهم قيمة أولية غير محددة. لذلك ، قبل تنفيذ الكود ، تُطلق على عملية محرك المتصفح مسح المتغيرات تلقائيًا مع الكلمات الرئيسية VAR والكلمات الرئيسية للوظائف والوظائف والوظائف المحددة قبل تنفيذ الكود.
ما قبل التحويل مع الكلمة الرئيسية للوظيفة
لنرى نتائج تنفيذ الكود التالية:
نسخة الكود كما يلي:
fn () ؛ // popt hello
وظيفة fn () {
تنبيه ('hello') ؛
}
نتيجة التنفيذ تنبثق مرحبًا ، ويمكن تنفيذ FN بشكل طبيعي. والسبب هو أن FN تم تخفيضه مسبقًا قبل تنفيذ المدونة. تم تعريف FN (محدد) أثناء الاستمتاع قبل. لدينا أسئلة مرة أخرى ، لماذا لا تظهر نتيجة تنفيذ التعليمات البرمجية الأولى 10 ، ولكنها غير محددة ، ويتم تقديم مفهوم آخر مرة أخرى.
إعلان وتعريف في جافا سكريبت
عادةً ما نستخدم مفتاح VAR لإعلان المتغيرات واستخدام الكلمة الرئيسية للوظيفة لتحديد الوظائف. ومع ذلك ، تعلن الكلمة الرئيسية للدالة وتحدد الوظائف في نفس الوقت ، في حين أن VAR يمكن أن يعلن فقط المتغيرات وليس لديها وظيفة التعريف.
فيما يلي متغيرات معلنة مع الكلمة الرئيسية VAR:
نسخة الكود كما يلي:
var n ؛ // إعلان متغير n
var m = 10 ؛ // إعلان متغير m وتعيين 10 له
فيما يلي وظائف محددة مع الكلمة الرئيسية للوظيفة:
نسخة الكود كما يلي:
// تحديد وظيفة fn
وظيفة fn () {
تنبيه ('hello') ؛
}
الفرق بين ما قبل الانتقاء للكلمات الرئيسية VAR والكلمات الرئيسية للدالة
في الواقع ، فإن الفرق بين الاثنين هو أنه عندما يتم توضيحه مسبقًا مع الكلمة الرئيسية VAR ، يتم فقط توضيح جزء الإعلان مسبقًا (لأنه لا يتمتع بالقدرة على تعريف نفسه) ، بينما يتم توضيحها مسبقًا مع الكلمة الرئيسية للوظيفة ، ويتم الإعلان عنها مسبقًا في نفس الوقت. ثم سنقوم بتحليل الكود الأول مرة أخرى ونحلله على النحو التالي:
مسبقًا من عدم الاهتمام (SCAM)
لماذا يقال أنه غير تقليدي؟ يرجى الاطلاع على الرمز التالي (باستثناء Firefox):
نسخة الكود كما يلي:
تنبيه (ن) ؛
fn () ؛
إذا (خطأ) {
var n = 10 ؛
وظيفة fn () {
تنبيه ('hello') ؛
}
}
سوف يظهر Undefined في السطر الأول من تنفيذ التعليمات البرمجية ، وسيظهر Hello في السطر الثاني من تنفيذ التعليمات البرمجية ؛ لأن N و FN يتم استكشافها مسبقًا قبل تنفيذ الكود. حتى إذا تم الحكم على الشرط على أنه خطأ ، فإن محرك المتصفح المستمر سيقوم بمسح المتغير المعلن عن الكلمة الرئيسية VAR و FN مع تعريف مفتاح الوظيفة إلى.
*تفسير ما قبل التفسير يتجاهل إعادة التعبير ، وليس إعادة تعريف
نظرًا لأن هذا المكان متشابك نسبيًا وليس من السهل فهمه ، فقد أضاف علامة نجمية ، يرجى الاطلاع على الرمز التالي:
نسخة الكود كما يلي:
تنبيه (ن) ؛
var n = 10 ؛
var n = 9 ؛
var n ؛
تنبيه (ن) ؛
ما هي نتيجة التنفيذ لهذا الرمز؟ دعونا نحلله:
استمر في تحميل الرمز ، يرجى تحليل نتائج التنفيذ التالية:
نسخة الكود كما يلي:
fn () ؛
وظيفة fn () {
تنبيه ('1') ؛
}
fn () ؛
وظيفة fn () {
تنبيه ('2') ؛
}
fn () ؛
مخطط تحليل الكود كما يلي:
وظيفة التحليل قبل الانتهاء مع تعريف الوظيفة
تلخيص:
يستخدم منشور المدونة هذا جزءًا كبيرًا من الكود ولقطات الشاشة لتقديم نظرة عامة على التفسير المسبق في JavaScript. بالنظر إلى الكتب المختلفة ، هناك عدد قليل جدًا من أوصاف التفسيرات المسبقة. في الواقع ، لا يوجد العديد من السيناريوهات المستخدمة في العمل. لسوء الحظ ، فإن التفسيرات المسبقة هي أمر لا بد منه في أسئلة المقابلة للشركات الكبرى. عندما تلامسها لأول مرة ، شعرت أنه لم يكتب دائمًا رمزًا وفقًا للمنس السليم ، ولكن في بعض الأحيان قد يتم تشغيله بشكل طبيعي ولن يبلغ عن خطأ. بالطبع ، زاد هذا أيضًا من استكشافنا لغزه وسمح لنا أيضًا بفهم كيفية توضيح محرك المتصفح وتنفيذ الكود لدينا. سأستخدم بعض الحالات الكلاسيكية لتحليلها في منشورات المدونة اللاحقة. شكرا لك مرة أخرى لدعمك!