أسبقية تعبير كائن الوظيفة في ECMASCRIPT
-
27-09-2019 - |
سؤال
من أجل تنفيذ مترجم صغير ينبعث من ECMASCript ، أحتاج إلى معرفة مدى قوة تعبير كائن الوظيفة ، أي ما هي أسبقية "المشغل"function(a1, a2, ...) { ... }
?
على سبيل المثال ، كيف حالfunction(a1, a2, ...) { ... } (b1, b2, ...)
من المفترض أن يتم تحليلها؟ للحصول على النتيجة ، وهي تطبيق B1 ، B2 ، ... على كائن الوظيفة ، يجب أن أستخدم أقواس حول كائن الوظيفة في مترجم وحيد القرن.
المحلول
لك function(a1, a2, ...) { ... } (b1, b2, ...)
غير صالح ، ويجب إرجاع خطأ بناء الجملة. ecmascript لديه مفهوم أ FunctionDeclaration
وكذلك هذا أ FunctionExpression
. قد ترغب في التحقق من ما يلي:
بينما أ FunctionExpression
هو مشغل ، FunctionDeclaration
هو بناء جملة خاص يستخدم لإعلان الوظائف ، والتي يتم رفعها تلقائيًا إلى أعلى نطاق المرفق.
التفاف أ function
في ال مشغل التجميع (أقواس) سوف يجبر المترجم على معاملته على أنه أ FunctionExpression
.
إذا جربت ما يلي في Firebug:
function () { alert('test'); }(); // Syntax Error
(function () { alert('test'); })(); // Works fine
نصائح أخرى
لتنفيذ وظيفة حرفية ، يجب إرفاقها بين قوسين. أيضاً:
(function(...){...})(...);
أو:
(function(...){...}(...));
بدون الأقواس ، ينتج خطأ بناء الجملة.