سؤال

منذ بعض الوقت نشرت سؤال حول ما هي الأسئلة التي يجب أن تكون قبر جافا سكريبت جيدة من الإجابة. وبعد أشار ميدر إلى السؤال التالي:

يعتمد التعليمة البرمجية التالية النقرات على أي عنصر "A" لتنبيه (-1) بسبب حقيقة أن "I" يتم الاحتفاظ به في وظيفة OnClick كمرجع وليس كقيمة:

<a href="#">text</a><br><a href="#">link</a>
<script>
var as = document.getElementsByTagName('a');
for ( var i = as.length; i--; ) {
    as[i].onclick = function() {
        alert(i);
        return false;
    }
}
</script>

السؤال هو: كيفية إصلاح هذا التنفيذ بحيث تكون وظيفة OnClick قيمة I وليس مرجعا؟

أنا لا أعرف الجواب. كيف تصلحها؟ كيف تجعلني نسخة من القيمة المرجعية بدلا من المرجع الفعلي؟

أسئلة جانبية: هل تم تمرير كل أنواع متغيرة كمرجع؟ أو هل تختلف ما إذا كان نوع الزيائية أو كائن؟

سيكون موضع تقدير أية أفكار.

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

المحلول

لفهم هذه المشكلة، يجب أن تعلم ما إنهاء يكون. ثم يجب أن تعرف أيضا كيف يتعامل JavaScript مع النطاق (على أساس وظيفة بدلا من على أساس كتلة ك C على سبيل المثال).

إليكم حل "Stantard":

<a href="#">text</a><br><a href="#">link</a>
<script type="text/javascript">
var as = document.getElementsByTagName('a');
for ( var i = as.length; i--; ) {
    as[i].onclick = (function(i) {
        return function() {
            alert(i);
            return false;
        }
    })(i);
}
</script>

نسخة أخرى لا بالضبط نفس الشيء، ولكن قد يكون من الأسهل فهمه إذا لم تكن معتادا على الإغلاق والنطاق في JS هو:

for ( var i = as.length; i--; ) {
    as[i].onclick = (function(number) {
        return function() {
            alert(number);
            return false;
        }
    })(i);

حصلت على الفكرة؟

نصائح أخرى

<a href="#">text</a><br><a href="#">link</a>
<script>
var as = document.getElementsByTagName('a');
for ( var i = as.length; i--; ) {
    as[i].onclick = function() {
        return function() {
           alert(i);
           return false;
        }
    }();
}
</script>

يمكن؟

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