تمييز eval () و new function () في javaScript
في JavaScript ، يواجه المطورون غالبًا وظيفتين يبدو أنهما يؤدون مهمة مماثلة: alual () ووظيفة جديدة (). بينما تقوم كلتا الوظيفتين بتقييم السلاسل كرمز ، فإن آلياتها الأساسية وآثارها مختلفة بشكل كبير.
هذا يعني أنه لديه إمكانية الوصول إلى المتغيرات المحلية المحددة في النطاق الحالي. في المقابل ، تقوم الوظيفة الجديدة () بتوزيع رمز JavaScript المخزّن في سلسلة في كائن دالة ، والذي يمكن استدعاؤه بعد ذلك. يتم إنشاء كائن الوظيفة هذا في نطاق منفصل ، وبالتالي لا يمكن الوصول إلى المتغيرات المحلية لبيئة الاتصال. إرجاع eval ('(' string ')') ؛ } var func = function (string) { إرجاع (وظيفة جديدة ('return (' string ')') ()) ؛ } console.log (تقييم ('2 1')) ؛ console.log (func ('2 1')) ؛
ستخرج كلتا الوظيفتين النتيجة المتوقعة من 3. ومع ذلك ، إذا قمنا بتعديل الكود لاستخدام المتغيرات المحلية ، يصبح الفرق واضحًا:var a = 11 ؛ eval ('(a = 22)') ؛ // يعدل المتغير المحلي ضمن وظيفة `test1` تنبيه (أ) ؛ // التنبيهات 22 }
في هذه الحالة ، سيؤدي استخدام eval () إلى تعديل المتغير المحلي A لأن التقييم يحدث ضمن نطاق وظيفة Test1. ومع ذلك ، إذا استخدمنا وظيفة جديدة ('return (a = 22) ؛') () بدلاً من ذلك ، سيبقى المتغير المحلي A غير متأثر لأن الكود يعمل في نطاق منفصل. يمكن أن تكشف المدخلات الضارة عن معلومات حساسة أو تنفيذ التعليمات البرمجية التعسفية. لذلك ، يوصى بشدة بتجنب استخدام هذه الوظائف ما لم يكن ذلك ضروريًا للغاية. تقييم () يقوم بتقييم السلاسل ضمن نطاق التنفيذ الحالي ، في حين أن الوظيفة الجديدة () تنشئ نطاقًا جديدًا للتقييم. يعد فهم هذا التمييز أمرًا ضروريًا لبرمجة JavaScript الفعالة والحفاظ على الأمان.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3