مشاكل إمكانية الوصول وتنظيم التعليمات البرمجية في جافا سكريبت مع jquery

StackOverflow https://stackoverflow.com/questions/1231524

سؤال

أواجه مشكلات في ترتيب الكود الخاص بي في برنامجي.الآن لدي بعض الأشياء في document.ready(function() { } ); وبعض الأشياء خارجه.عندما أقوم بنقل أي شيء (لتنظيم الكود الخاص بي أو تحسينه) ينتهي بي الأمر بكسر شيء ما، أعتقد أنه بسبب ترتيب الإعلانات أو مستويات الوصول (على سبيل المثال.شيء خارج document.ready(function {}); لا يستطيع الوصول إلى شيء بداخله.

هل لدى أي شخص أي فكرة عن المكان الذي يجب أن توجد فيه الأشياء في جافا سكريبت؟

يجب أن يكون كل شيء في الداخل document.ready(function() {});?
هل هناك أي سبب لوجود أي شيء خارج document.ready(function() {});?
هل الكود داخل document.ready(function() {}); لا يمكن الوصول إليها عن طريق الكود الخارجي؟

هل كانت مفيدة؟

المحلول

<اقتباس فقرة>   

1. كل شيء يجب أن يكون ضمن   document.ready (وظيفة () {})؛؟

لا، أعتقد أن وظيفة document.ready يجب أن يكون فقط لتهيئة الأمور، تعيين معالجات الأحداث وهلم جرا.

<اقتباس فقرة>   

2. هل هناك أي سبب ل   أي شيء خارج   document.ready (وظيفة () {})؛؟

وإعادة استخدام الرمز، وتنظيم كود أفضل.

<اقتباس فقرة>   

3. هو رمز في   document.ready (وظيفة () {})؛   لا يمكن الوصول إليها عن طريق كود الخارجي؟

نعم، والمتغيرات والكائنات التي تم إنشاؤها على document.ready لا يمكن الوصول إليها من نطاق الخارجي.

نصائح أخرى

هل يجب أن يكون كل شيء ضمن document.ready(function() {});؟

نعم و لا.في تطبيقات JavaScript واسعة النطاق، أقوم بتهيئة وحدات التحكم الرئيسية الخاصة بي في النطاق العام من معالج الأحداث هذا.ومع ذلك، هناك تعليمات برمجية لا تحتاج إلى الانتظار حتى يصبح DOM جاهزًا، وتحديدًا: رمز لا يعتمد على DOM.أعتقد أن هذا أمر مستقيم جدًا.على سبيل المثال، أعلن عن فئات كائنات التكوين والوظائف وما إلى ذلك خارج معالج الحدث هذا.

هل هناك أي سبب لوجود أي شيء خارج document.ready(function() {});؟

بالتأكيد، للسبب الذي تم التطرق إليه أعلاه.بشكل أساسي، التعليمات البرمجية التي لا تتطلب تفاعل DOM يجب ألا تنتظر حتى يتم تحميل DOM، خاصة إذا كان من الممكن تنفيذها بشكل غير متزامن مع تحميل DOM (على سبيل المثال:تعريفات الوظائف، وكائنات التكوين، وما إلى ذلك).

كما أن عدم تضمين جميع التعليمات البرمجية الخاصة بك في معالج حدث واحد يبقي الأمور أكثر تنظيماً، ويسمح لك بتقسيم التعليمات البرمجية إلى وحدات، واستخدام أنماط التصميم المناسبة، وما إلى ذلك.

هل الكود موجود داخل document.ready(function() {});لا يمكن الوصول إليها عن طريق الكود الخارجي؟

مرة أخرى، نعم ولا.إذا أعلنت أنها محلية مع var إذن نعم، لا يمكن الوصول إليه بواسطة النطاق الخارجي لأنه محلي لمعالج الحدث؛وإلا فهو في النطاق العالمي ويمكن الوصول إليه في النطاق الخارجي.إليك مثال (مستضاف هنا: http://jsbin.com/uriqe)

جافا سكريبت

var foo = function() {
  alert(global);
  return false;
}

$(document).ready(function() {
  global = "you can see me!?";
  alert("global is initiated");
});

لغة البرمجة

<body>
  <p><a href="#" onclick="foo()">click me</a></p>
</body>

onclick بدلاً من إرفاق حدث الطريقة غير المزعجة $(document).ready() يتم استخدامه عمدا لتجنب أي أسئلة/حجج حول foo إمكانية الوصول إلى global من خلال خاصية الإغلاق.

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

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