Un internautor hizo una pregunta, como se muestra en el siguiente HTML, ¿por qué cada salida es 5, en lugar de hacer clic en cada P, alertará a los correspondientes 1, 2, 3, 4, 5?
<html> <fead> <meta http-equiv = "content-type" content = "text/html; charset = utf-8"/> <title> Cerrar demostración </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> Producto 1 </p> <p> Producto 2 </p> <p> Producto 3 </p> <p> Producto 4 </p> <p> Producto 5 </p> </body> </html>Hay varias soluciones
1. Guarde la variable I en cada objeto de párrafo (p)
function init () {var pery = document.getElementsBytagName ("P"); for (var i = 0; i <pary.length; i ++) {pary [i] .i = i; pary [i] .Onclick = function () {alert (this.i); }}}2. Guarde la variable I en la función anónima en sí misma
function init2 () {var pery = document.getElementsBytagName ("P"); for (var i = 0; i <pary.length; i ++) {(pary [i] .Onclick = function () {alert (arguments.callee.i);}). i = i; }}3. Agregue una capa de cierre y se pasa a la función interna en forma de parámetros de función.
function init3 () {var pery = document.getElementsByTagName ("P"); for (var i = 0; i <pary.length; i ++) {(function (arg) {pary [i] .Onclick = function () {alert (arg);};}) (i); // argumentos al llamar}}}}4. Agregue una capa de cierre, y se pasa a la función de memoria en forma de una variable local
function init4 () {var pery = document.getElementsBytagName ("P"); for (var i = 0; i <pary.length; i ++) {(function () {var temp = i; // local variable pary [i] .onclick = function () {alert (temp);}}) (); }}5. Agregue una capa de cierre y devuelva una función como evento de respuesta (tenga en cuenta la diferencia sutil de 3)
function init5 () {var pery = document.getElementsBytagName ("P"); for (var i = 0; i <pary.length; i ++) {pary [i] .Onclick = function (arg) {return function () {// return una función alerta (arg); } }(i); }}6. Implementado con la función, de hecho, cada vez que se genera una instancia de función, se generará un cierre.
function init6 () {var pery = document.getElementsBytagName ("P"); for (var i = 0; i <pary.length; i ++) {pary [i] .Onclick = new function ("alerta (" + i + ");"); // lo nuevo genera una instancia de función a la vez}}7. Use la función para implementarla, preste atención a la diferencia entre 6
function init7 () {var pery = document.getElementsByTagName ("P"); for (var i = 0; i <pary.length; i ++) {pary [i] .Onclick = function ('alerta ('+i+'') ')}}Lo anterior es la breve discusión sobre el JavaScript para el cierre de bucle que el editor le trae. Espero que todos apoyen a Wulin.com más ~