سؤال

ECMA-262 5.1 الأقسام الفرعية 10.4.2 و 10.4.2.1 تشير إلى "استدعاء السياق." هذا لا يبدو أن يكون هو موضح في أي مكان آخر في المستند.

نقلا عن المواصفات ، التشديد من الألغام:

10.4.2 دخول Eval رمز

الخطوات التالية يتم تنفيذها عند السيطرة يدخل في سياق التنفيذ عن التقييم كود:

  1. إذا كان هناك أي استدعاء السياق أو إذا كان eval رمز لم يتم تقييمها من قبل دعوة مباشرة (15.1.2.1.1) إلى الدالة eval ثم ،

10.4.2.1 صارمة وضع قيود

التقييم رمز لا مثيل متغير أو دالة الارتباطات في متغير البيئة استدعاء السياق استندت إلى eval إذا كان أي رمز استدعاء السياق أو eval قانون صارم رمز.بدلا من هذه الارتباطات يتم إنشاء مثيل جديد VariableEnvironment التي لا يمكن الوصول إليها إلا eval رمز.

  • ما معنى "الدعوة السياق" يعني في هذه الفقرات ؟ أظن أن ذلك يشير إلى سياق التنفيذ في الجزء العلوي من المكدس قبل eval يطلق عليه ، يمكن لأي شخص التحقق من هذا ؟

  • ماذا يعني أن يكون "لا يدعو السياق؟" يمكن للشخص تقديم مثال من التعليمات البرمجية أو الظروف التي يمكن أن تؤدي إلى الدعوة إلى eval مع عدم استدعاء السياق ؟

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

المحلول

إن "استدعاء السياق" يشير إلى السياق الأصلي eval وظيفة مطلوب من.

إذا كنت تنفيذ eval من بعض التعليمات البرمجية الأصلية (على سبيل المثال ، يمكنك تشغيل وظيفة الأم التي ينفذ التعليمات البرمجية عند الانتهاء من استخدام eval لسبب أو آخر) ، ثم سيكون لديك أي سياق ، والتي يتم بعد ذلك تحديد تعمل تحت نطاق عالمي.سياق يشير فقط إلى ECMAScript التعليمات البرمجية القابلة للتنفيذ.

ومع ذلك ، فإن استدعاء السياق يشير إلى متغيرات والتوجيهات في سياق التنفيذ من حيث يطلق عليه.على سبيل المثال, فإنه يعلم أن التقييم يهدف إلى العمل الصارم رمز إذا كان يتحقق استدعاء السياق.

هذا هو توضيح جدا مثل هذا السؤال في ES-مناقشة القائمة البريدية, حيث برندان إيتش (خالق جافا سكريبت) يستجيب:

كيف يمكن أن eval رمز لا يكون داعيا السياق ؟

ES3 يقول:

10.2.2 Eval رمز

عندما يدخل إعدام السياق eval الكود السابق النشط سياق التنفيذ ، ويشار إلى أن استدعاء السياق, يستخدم لتحديد نطاق سلسلة متغير الكائن و هذه القيمة.إذا كان هناك أي استدعاء السياق ، ثم initialising سلسلة نطاق متغير مثيل ، تحديد هذه القيمة يتم تنفيذ مثل المدونة العالمية.

أنا في حيرة "إذا لم يكن هناك استدعاء السياق".كيف يمكن إمكانية تنشأ ؟ كيف eval يطلق على إن لا أحد يدعو ذلك ؟

الرد:

مكالمة من التعليمات البرمجية الأصلية ، "المضيف" البرنامج.

بعض المتصفحات الدعم غير المباشرة eval, يسمح هذا:

setTimeout(eval, 0, "alert('hi mom')");

النافذة المستخدمة في setTimeout تم العثور على طول سلسلة نطاق ، حتى

myFrame.setTimeout(eval, 0, "alert(x)");

يجب أن تظهر myFrame.x, وليس الدعوة إطار أو نافذة x.

ملاحظة: myFrame في هذا المثال يشير إلى الإطار العالمي نطاق.

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