هذه المقالة ترجمة ECMA-262-3 in detail Chapter1. Executions Contexts للكاتب Dmitry A. Soshnikov
1- مقدمة
2- تعريفات
3- أنواع الكود القابل للتنفيذ
كود ال global
كود الوظائف
كود الوظيفة eval
4- إستنتاج
5- المزيد
فى هذا المقال سأقوم بذكر أنواع سياقات التنفيذ execution contexts ب ECMAScript و أنواع الكود القابل للتنفيذ المرتبط بهم .
فى كل مرة ينتقل فيها التحكم إلى كود قابل للتنفيذ فى ECMAScript فإن الكود يدخل فى سياق للتنفيذ execution context. سياق التنفيذ execution context إختصارا EC هو مفهوم تجريدى تستخدمه مواصفات ال ECMAScript لتصنيف وتمييز الأكواد القابلة للتنفيذ.
منطقيا , مجموعة من سياقات التنفيذ النشطة تقوم بتشكيل stack ، أسفل هذا ال Stack غالبا ما يكون السياق الشامل global context ، أما بالأعلى فيكون سياق التنفيذ النشط الحالى . يتم تعديل ال stack – يضاف إلى و يحذف من أعلاه – خلال الدخول إلى و الخروج من أنواع سياقات التنفيذ المختلفة .
مع هذا المفهود التجريدى لسياق التنفيذ ، نوع الكود القابل للتنفيذ executable code مرتبط به . عند الحديث عن نوع الكود فإنه من الممكن فى بعض الأوقات ان نقصد به سياق التنفيذ.
فى الأمثلة سنعرف stack سياقات التنفيذ كمصفوفة :
ECStack = [];
يتم الإضافة إلى هذا ال stack فى كل مرة عند دخول وظيفة حتى إذا إستدعت هذه الوظيفة نفسها recursively أو كانت constructor ، و إيضا عند تنفيذ كود من خلال الوظيفة eval .
هذا النوع من الكود الذى يتم تنفيذه فى مستوى البرنامج مباشرة داخل ال script tag او الذى يتم تحميلة من ملف خارجى خارج أى وظيفة ، عندما يتم بدأ تطبيق البرنامج فإن ال ECStack يبدو هكذا :
ECStack = [
globalContext
];
عند دخول كود الوظيفة (كل أنواع الوظائف) ، فإن ال ECStack يتم الإضافة عليها عناصر جديدة ، من المهم ان تلاحظ ان سياق كود الوظيفة لا يضمن سياق الوظائف الداخلية ، على سبيل المثال هذه الوظيفة تستدعى نفسها مرة واحدة فقط :
(function foo(bar) {
if (bar) {
return;
}
foo(true);
})();
التعديلات التى تطرأ على ECStack :
// عند دخول foo لأول مرة لتنفيذ الكود ECStack = [ <foo> functionContext globalContext ]; // عندما نادت foo نفسها ECStack = [ <foo> functionContext – recursively <foo> functionContext globalContext ];
كل return تقوم بالخروج من سياق التنفيذ الحالى و بالتالى يتم حذف أعلى عنصر فى ال ECStack بالتوالى من أعلى إلى أسفل . و أيضا الإستثناء الذى يتم طرحه ولا يوجد كود لإلتقاته يتسبب فى الخروج من واحد او كثر من سياقات التنفيذ حتى يتم إلتقاته و معالجته ، بعد انتهاء عمل هذا الكود فإن ال ECStack مرة أخرى يحتوى على السياق الشامل globalContext فقط حتى إنتهاء البرنامج .
الأمور أكثر إثارة عندما نتحدث عن كود ال eval ، ينشأ هنا مفهوم سياق الإستدعاء calling context السياق الذى يتم منه إستدعاء الوظيفة eval ، حيث ان التأثير الذى تحدثه الوظيفة eval مثل انشاء المتغيرات و الدوال يؤثر على سياق الإستدعاء :
eval('var x = 10');
(function foo() {
eval('var y = 20');
})();
alert(x); // 10
alert(y); // "y" is not defined
التعديلات التى تطرأ على ECStack :
ECStack = [
globalContext
];
// eval('var x = 10');
ECStack.push(
evalContext,
callingContext: globalContext
);
// eval خرجت من السياق
ECStack.pop();
// عند إستدعاء الوظيفة foo
ECStack.push(<foo> functionContext);
// eval('var y = 20');
ECStack.push(
evalContext,
callingContext: <foo> functionContext
);
// الإنتهاء من تنفيذ eval
ECStack.pop();
// الإنتهاء من تنفيذ foo
ECStack.pop();
فى SpiderMonkey محرك ترجمة الجافاسكربت الموجود فى فايرفوكس و سندربرد لغاية النسخة 1.7 من الممكن تمرير عبارة تانية للوظيفة eval لكى تمثل سياق الإستدعاء calling context ، ومن الممكن عن طرق ذلك التأثير على المتغيرات الخاصة كما يسميها البعض :
function foo() {
var x = 1;
return function () { alert(x); };
};
var bar = foo();
bar(); // 1
// تمرير سياق الإستدعاء للتأثير على المتغير الداخلى إكس
eval('x = 2', bar);
bar(); // 2
هذه المعالجة النظرية مطلوبة لمزيد من التحليل لتفاصيل المواضيع الاخرى المرتبطة بسياقات التنفيذ مثل كائن المتغير Variable object و سلسلة المدى scope chain … الخ .
القسم المقابل فى مواصفات ECMA-262-3 Execution Contexts
الأوسمة: ecmascript, execution context, javascript
21/04/2010 عند 7:21 ص |
[...] this article in: Russian, Chinese, Arabic. IntroductionDefinitionsTypes of executable codeGlobal codeFunction codeEval [...]
21/04/2010 عند 7:22 ص |
[...] this article in: English, Chinese, Arabic. ВведениеОбъявление данныхКонкретизация объекта [...]
21/04/2010 عند 7:23 ص |
[...] this article in: English, Chinese, Arabic. ВведениеОпределенияТипы исполняемого [...]
21/04/2010 عند 12:48 م |
[...] This post was mentioned on Twitter by Dmitry A. Soshnikov and Mostafa Farghaly, Mostafa Farghaly. Mostafa Farghaly said: ترجمة ECMA-262-3 الفصل الإول : سياقات التنفيذ http://bit.ly/cxJDQj [...]
12/05/2010 عند 11:31 ص |
[...] : سياقات التنفيذ هذا المقال أستخلص من مدونة Keepondev ، ومن هنا يمكنك الإطلاع على المقال [...]
12/05/2010 عند 11:31 ص |
[...] 1- مقدمة 2- تعريفات 3- أنواع الكود القابل للتنفيذ كود ال global كود الوظائف كود الوظيفة eval 4- إستنتاج 5- المزيد [...]
12/05/2010 عند 11:32 ص |
[...] مقدمة 2- تعريفات 3- أنواع الكود القابل للتنفيذ كود ال global كود الوظائف [...]
12/05/2010 عند 11:32 ص |
[...] مقدمة 2- تعريفات 3- أنواع الكود القابل للتنفيذ كود ال global كود الوظائف كود الوظيفة eval 4- إستنتاج 5- [...]
12/05/2010 عند 11:32 ص |
[...] 2- تعريفات 3- أنواع الكود القابل للتنفيذ كود ال global كود الوظائف كود الوظيفة eval 4- إستنتاج 5- [...]
12/05/2010 عند 11:32 ص |
[...] القابل للتنفيذ كود ال global كود الوظائف كود الوظيفة eval 4- إستنتاج 5- [...]
12/05/2010 عند 11:32 ص |
[...] 1- مقدمة 2- تعريفات 3- أنواع الكود القابل للتنفيذ كود ال global كود الوظائف كود الوظيفة eval 4- إستنتاج 5- المزيد [...]
14/05/2011 عند 6:36 م |
goooode
best weshes
26/01/2012 عند 11:44 ص |
[...] مقدمة 2- تعريفات 3- أنواع الكود القابل للتنفيذ كود ال global كود الوظائف [...]
26/01/2012 عند 11:44 ص |
[...] 1- مقدمة 2- تعريفات 3- أنواع الكود القابل للتنفيذ كود ال global كود الوظائف كود الوظيفة eval 4- إستنتاج 5- المزيد [...]