هناك عدة طرق للاتصال بوظيفة JS:
(1) استدعاء الوظيفة المسماة مباشرة
نسخة الكود كما يلي:
وظيفة foo ()
{
}
foo () ؛
(2) يتم استدعاء وظائف مجهولة بالرجوع إليها
نسخة الكود كما يلي:
fooref = function ()
{
}
fooref () ؛
(3) استدعاء وظيفة مجهولة بدون مرجع 1
نسخة الكود كما يلي:
(وظيفة()
{
} ()) ؛
(4) استدعاء وظيفة مجهولة بدون مراجع 2
نسخة الكود كما يلي:
(وظيفة()
{
}) () ؛
(5) استدعاء وظيفة مجهولة بدون مراجع 3
نسخة الكود كما يلي:
وظيفة باطلة ()
{
} () ؛
يوضح الشكل 1.1 والشكل 1.2 أن عملية تشغيل هذين التعبيرين مختلفة. في الشكل 1.1 ، يتم استخدام المشغل القسري لتمكين تشغيل استدعاء الوظائف ليتم تنفيذها. في الشكل 1.2 ، يتم استخدام المشغل القسري لتشغيل التعبير "إعلان الكمية المباشرة للوظيفة" ويعيد إشارة إلى الوظيفة نفسها ، ثم يتم تشغيل مرجع الوظيفة من خلال عملية استدعاء الوظيفة "()". آخر دالة مجهولة الكشف عن استدعاءات void function () {} () ؛ يستخدم لاستدعاء الوظيفة وتجاهل قيمة الإرجاع. يتم استخدام void المشغل لجعل تعبيرات الوظيفة التي تتبعها عملياتها. إذا لم نستخدم "void" والتشغيل القسري "()" ، فهل يتم تنفيذ الكود:
(1) الدالة () {} () // استخدم '' () "لفرض المكالمة
(2) function () {} () ؛ //يستخدم "؛" لتنفيذ البيان
سيعتقد محرك البرنامج النصي أن الدالة () {} هو إعلان دالة ، بحيث لا يمكن اجتياز اكتشاف بناء الجملة ، ويتم تحليل الرمز على هذا النحو:
وظيفة(){}؛()؛
يتم تفسير الدالة () {} على أنها إعلان ، بينما "() ؛" يتم تفسيره بشكل مستقل كخط ، وبالتالي سيتم الإبلاغ عن خطأ في بناء الجملة. لماذا تعلم أنه خطأ ناتج عن "() ؛"؟ نغيره إلى الكود التالي:
function () {} (1) ؛
سيتم تفسير هذا من قبل المحرك على النحو التالي:
fucntion () {} ؛
(1) ؛ // التعبير واحد القيمة
لذلك ، مرت اكتشاف بناء الجملة ...