سؤال

من أجل تنفيذ مترجم صغير ينبعث من 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(...){...}(...));

بدون الأقواس ، ينتج خطأ بناء الجملة.

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