طرح مستخدم الإنترنت سؤالًا ، كما هو موضح في HTML التالي ، لماذا يكون كل مخرج 5 ، بدلاً من النقر على كل p ، ستنبه المقابلة 1 ، 2 ، 3 ، 4 ، 5.
<html> <head> <meta http-equiv = "content-type" content = "text/html ؛ charset = utf-8"/> <title> demo الإغلاق </title> <script type = "text/javaScript"> init () {var pary = document.getelementbytagname ("p") ؛ لـ (var i = 0 ؛ i <pary.length ؛ i ++) {pary [i] .onclick = function () {Alert (i) ؛ })هناك العديد من الحلول
1. احفظ المتغير I إلى كل كائن فقرة (P)
الدالة init () {var pary = document.getElementSbyTagName ("p") ؛ لـ (var i = 0 ؛ i <pary.length ؛ i ++) {pary [i] .i = i ؛ pary [i] .onclick = function () {Alert (this.i) ؛ }}}2. احفظ المتغير I في الوظيفة المجهولة نفسها
الدالة init2 () {var pary = document.getElementSbyTagName ("p") ؛ لـ (var i = 0 ؛ i <pary.length ؛ i ++) {(pary [i] .Onclick = function () {encuments.callee.i) ؛}). i = i ؛ }}3. أضف طبقة من الإغلاق ، ويتم نقلها إلى الوظيفة الداخلية في شكل معلمات الوظيفة.
الدالة init3 () {var pary = document.getElementSbyTagName ("p") ؛ لـ (var i = 0 ؛ i <pary.length ؛ i ++) {(function (arg) {pary [i] .onclick = function () {alert (arg) ؛} ؛}) (4. أضف طبقة من الإغلاق ، ويتم نقلها إلى وظيفة الذاكرة في شكل متغير محلي
الدالة init4 () {var pary = document.getElementSbyTagName ("p") ؛ لـ (var i = 0 ؛ i <pary.length ؛ i ++) {(function () {var temp = i ؛ // pary pary local [i] .onclick = function () {alert (temp) ؛}}) () ؛ }}5. أضف طبقة من الإغلاق وإرجاع وظيفة كحدث استجابة (لاحظ الفرق الدقيق من 3)
الدالة init5 () {var pary = document.getElementSbyTagName ("p") ؛ لـ (var i = 0 ؛ i <pary.length ؛ i ++) {pary [i] .onclick = function (arg) {return function () {// إرجاع تنبيه دالة (arg) ؛ } }(أنا)؛ }}6. تم تنفيذها مع الوظيفة ، في الواقع ، في كل مرة يتم فيها إنشاء مثيل وظيفة ، سيتم إنشاء إغلاق.
الدالة init6 () {var pary = document.getElementSbyTagName ("p") ؛ لـ (var i = 0 ؛ i <pary.length ؛ i ++) {pary [i] .onclick = function new ("Alert (" + i + ") ؛") ؛7. استخدم الوظيفة لتنفيذها ، انتبه إلى الفرق بين 6
الدالة init7 () {var pary = document.getElementSbyTagName ("p") ؛ لـ (var i = 0 ؛ i <pary.length ؛ i ++) {pary [i] .onclick = function ('Alert ('+i+')')}}ما سبق هو المناقشة الموجزة حول JavaScript for Loop Closure الذي يجلبه لك المحرر. آمل أن يدعم الجميع wulin.com أكثر ~