تم كتابة هذا الدليل من قبل الأب الذي يقوم ببناء alis4ops.com.
لدينا الوظائف التالية:
بابا محدد في DragDrop.js
function handleStartTouch(event) { draggedElement = event.target; const touch = event.touches[0]; touchStartX = touch.clientX - draggedElement.getBoundingClientRect().left; touchStartY = touch.clientY - draggedElement.getBoundingClientRect().top; } function handleMoveTouch(event) { event.preventDefault() if (draggedElement) { const touch = event.touches[0]; // ..more code } }
لاحظ أننا نصل إلى DraggedElement على السطر:
لا يُظهر hanldeMoveTouch خطأً عند الاتصال.
سيؤدي وضع نقطة توقف على if (draggedElement) في Chrome DevTools إلى إظهار أن DragedElement يتحلل إلى نفس عنصر html الذي يوفره events.target في HandleStartTouch
لماذا يمكننا الوصول إلى DraggedElement في HandleMoveTouch حتى من خلاله المحدد في HandleStartTouch
بشكل أكثر عمومية، لماذا يمكننا الوصول إلى متغير تم تعريفه في وظيفة في وظيفة أخرى في جافا سكريبت؟
انظر إلى وظيفة HandleStartTouch:
function handleStartTouch(event) { draggedElement = event.target; const touch = event.touches[0]; touchStartX = touch.clientX - draggedElement.getBoundingClientRect().left; touchStartY = touch.clientY - draggedElement.getBoundingClientRect().top; }
على وجه التحديد السطر:
draggedElement = event.target;
لا يتم الإعلان عن اسم المتغير الذي تم سحبه باستخدام أي من الكلمات الرئيسية
على سبيل المثال، نحن لا نعرّفها على النحو التالي:
const draggedElement = event.target;
في جافا سكريبت، عندما لا نستخدم إعلانات المتغيرات (وتسمى أيضًا الكلمات الرئيسية)، تعتبر جافا سكريبت هذا المتغير متغيرًا عامًا.
خذ بعين الاعتبار المثال التالي حيث نحدد وظيفتين:
// Takes in two arguments and returns the sum function add(x, y) { sum = x y return sum } // prints sum if it is defined function printStatus() { if (sum) { console.log("Sum: ", sum) } else { console.log("Sum does no exist") } }
فتح أدوات التطوير في Chrome
في وحدة التحكم، اتصل بـ add(1,1)
add(1,1) => 2
ثم اتصل بحالة الطباعة
يمكننا أن نرى أن printStatus () يمكنه الوصول إلى مجموع المتغير المحدد في add(x, y)
هذا لأنه تم الإعلان عن مجموع المتغير بدون الكلمات الأساسية التالية:
الآن دعنا نغير add(x, y) add لاستخدام إعلان متغير لـ sum
// Takes in two arguments and returns the sum function add(x, y) { const sum = x y // use the variable declartion const return sum } // prints sum if it is defined function printStatus() { if (sum) { console.log("Sum: ", sum) } else { console.log("Sum does no exist") } }
دعونا نحدد الوظائف في سجل وحدة التحكم مرة أخرى.
نحتاج إلى إعادة تعريفه لأننا بدأنا وحدة تحكم مطور جديدة.
الآن في وحدة التحكم، اتصل بـ add(2, 2)
اتصل بـ printStatus لمعرفة ما إذا كان بإمكانك الوصول إلى مجموع المتغير المحدد في add(x, y)
printStatus() > Uncaught ReferenceError: sum is not defined at printStatus (:9:3) at :1:1
الخطأ يقول أن المبلغ غير محدد
يؤكد هذا أنه عندما يتم تعريف متغير بإعلان متغير (const، Let، var) داخل دالة، فإن نطاق هذا المتغير يكون فقط داخل الوظيفة
عندما يتم تعريف متغير بدون تعريف متغير داخل دالة، يكون نطاق هذا المتغير عامًا.
آمل أن يساعد هذا بابا (وأي شخص آخر يقرأ هذا.)
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3