Сеть задал вопрос, как показано в следующем HTML, почему каждый вывод 5, вместо того, чтобы нажать на каждый P, вы будете предупреждать соответствующие 1, 2, 3, 4, 5.
<html> <Head> <meta http-equiv = "content-type" content = "text/html; charset = utf-8"/> <title> закрытие демо </title> <script type = "text/javascript"> function init () {var pary = document.getElementsbytagname ("p"); for (var i = 0; i <pary.length; i ++) {pary [i] .onclick = function () {alert (i); }}} </script> </head> <body onload = "init ();"> <p> Продукт 1 </p> <p> Продукт 2 </p> <p> Продукт 3 </p> <p> Продукт 4 </p> <p> Продукт 5 </p> </body> </html>Есть несколько решений
1. Сохраните переменную I для каждого объекта абзаца (P)
function init () {var pary = document.getElementsbytagname ("p"); for (var i = 0; i <pary.length; i ++) {pary [i] .i = i; pary [i] .onclick = function () {alert (this.i); }}}2. Сохраните переменную I в самой анонимной функции
function init2 () {var pary = document.getElementsbytagname ("p"); for (var i = 0; i <pary.length; i ++) {(pary [i] .onclick = function () {alert (arguments.callee.i);}). i = i; }}3. Добавьте слой закрытия, и я передается во внутреннюю функцию в форме параметров функции.
function init3 () {var pary = document.getElementsbytagname ("p"); for (var i = 0; i <pary.length; i ++) {(function (arg) {pary [i] .onclick = function () {alert (arg);};}) (i); // Аргументы при вызове}}}4. Добавьте слой закрытия, и я передаю функции памяти в форме локальной переменной
function init4 () {var pary = document.getElementsbytagname ("p"); for (var i = 0; i <pary.length; i ++) {(function () {var temp = i; // локальная переменная pary [i] .onclick = function () {alert (temp);}}) (); }}5. Добавьте слой закрытия и верните функцию в качестве события ответа (обратите внимание на тонкую разницу из 3)
function init5 () {var pary = document.getElementsbytagname ("p"); for (var i = 0; i <pary.length; i ++) {pary [i] .onclick = function (arg) {return function () {// возвращать функцию Alert (arg); }} (i); }}6. Реализовано с функцией, на самом деле, каждый раз, когда генерируется экземпляр функции, будет создано закрытие.
function init6 () {var pary = document.getElementsbytagname ("p"); for (var i = 0; i <pary.length; i ++) {pary [i] .onclick = new Function ("alert (" + i + ");"); // Новая генерирует экземпляр функции за раз}}7. Используйте функцию для его реализации, обратите внимание на разницу между 6
function init7 () {var pary = document.getElementsbytagname ("p"); for (var i = 0; i <pary.length; i ++) {pary [i] .onclick = function ('alert ('+i+')')}}Выше приведено краткое обсуждение JavaScript для закрытия цикла, которое редактор приносит вам. Я надеюсь, что все будут поддерживать wulin.com больше ~