تمرير غير محدد إلى JavaScript الذي تم استدعاؤه فورًا لتعبيرات الوظائف

في بعض الأحيان يمكنك اكتشاف الكود القديم في البرية حيثundefinedيتم تمريره إلى وظيفة. لماذا؟

اكتشفت هذه الحيلة الصغيرة أثناء مشاهدة المشهورفيديو Paul Irish حول شفرة مصدر jQuery.

يأتي هذا الفيديو من حقبة مختلفة وكان عمره 9 سنوات وقت كتابة هذا التقرير ، وقد تغيرت شفرة مصدر jQuery منذ ذلك الحين ، لذلك لا يمكنك تحديد هذا الشيء هناك ، لكنه لا يزال شيئًا مثيرًا للاهتمام.

أيضًا ، تغيرت JavaScript منذ ذلك الحين. يتم تطبيق هذه التقنية فقط على JavaScript قبل ES5.

قبل ES5 ، الذي تم إصداره في عام 2009 ، كانت هذه خطوة مطلوبة تقريبًا.

ملاحظة: لا تحتاج قواعد أكواد ES5 + إلى إضافة هذا بعد الآن لأنه الآنundefinedهي قيمة للقراءة فقط.

في بعض الأحيان ، نتحقق من المتغيرات في الكود الخاص بنا لمعرفة ما إذا كانت غير محددة ، بهذه الطريقة:

if (car !== undefined) {

}

إذا كان هذا هو الكود الخاص بنا ، والذي يتم تشغيله على خوادمنا الخاصة ، والتي نتحكم فيها ، فيجب أن يعمل هذا بشكل جيد. لكن تخيل أن مكتبة مثل jQuery تحتاج إلى اختبار المعركة ، للعمل على كل موقع ممكن.

إذا قام شخص ما بالكتابةundefinedمع بسيط

undefined = '🤔' //whatever value you prefer

ثم ما سبقifستفشل مقارنةcarإلى🤔.

تم إصلاح هذا منذ ذلك الحين في ES5 ، ولكن كان ممكنًا قبل ذلك.

لوcarفي الواقع غير محدد ، لم يكن هناك طريقة لمعرفة ذلك الآن.

باستثناء استخدام هذه التقنية: نحن نلف كل الكود الخاص بنا في IIFE (تم استدعاء التعبير الوظيفي فورًا) ونمرر متغيرًا واحدًا لتعريف الوظيفة ، دون إضافته في مرحلة الاستدعاء.

(function() {
  /* our function code */
})()
(function(undefined) {
  /* our function code */
})()

نرى،undefinedيتم تمريرها كوسيطة ، ولكن لا يتم تمريرها كمعامل عند استدعاء الدالة لذلك ، داخل الدالة قيمة المتغيرundefinedهي (مضمونة) القيمة الأصلية لـundefined. بغض النظر عما تفعله البرامج النصية الأخرى على الصفحة ، فهي معزولة.

الآن ، الطريقة المفضلة لحل هذه المشكلة هي استخدام هذه التقنية للتحقق من القيم غير المحددة:

if (typeof car !== 'undefined') {

}

الtypeofيُرجع عامل التشغيل سلسلة بنوع متغير. يمكننا التحقق من ذلك مقابل'undefined'سلسلة ، ولن نواجه المشكلة أعلاه في المقام الأول.

ولكن من الجيد دائمًا معرفة أسباب بعض الأشياء التي يمكنك قراءتها على رمز مكتوب بواسطة الآخرين ، خاصةً عندما يكون رمزًا على مستوى المكتبة بحاجة إلى التشغيل في كل مكان.


المزيد من دروس js: