Ein Internetnutzer stellte eine Frage, wie in der folgenden HTML gezeigt, warum jeder Ausgang 5 ist, anstatt auf jedes P zu klicken, werden Sie die entsprechenden 1, 2, 3, 4, 5 alarmieren.
<html> <kopf> <meta http-äquiv = "content-type" content = "text/html; charSet = utf-8"/> <title> Schließen der Demo </title> <script type = "text/javaScript"> function init () {var pary = document.getelementsByTagname ("p"); für (var i = 0; i <pary.length; i ++) {pary [i] .onclick = function () {alert (i); }}} </script> </head> <body onload = "init ();"> <p> Produkt 1 </p> <p> Produkt 2 </p> <p> Produkt 3 </p> <p> Produkt 4 </p> <p> Produkt 5 </p> </body> </html>Es gibt mehrere Lösungen
1. Speichern Sie die Variable I in jedem Absatzobjekt (p)
Funktion init () {var pary = document.getElementsByTagName ("p"); für (var i = 0; i <pary.length; i ++) {pary [i] .i = i; Pary [i] .onclick = function () {alert (this.i); }}}2. Speichern Sie die Variable I in der anonymen Funktion selbst
Funktion init2 () {var pary = document.getElementsByTagName ("p"); für (var i = 0; i <pary.length; i ++) {(pary [i] .onclick = function () {alert (argumente.callee.i);}). i = i; }}3. Fügen Sie eine Schließebene hinzu, und ich wird in Form von Funktionsparametern an die innere Funktion übergeben.
Funktion init3 () {var pary = document.getElementsByTagName ("p"); für (var i = 0; i <pary.length; i ++) {(function (arg) {pary [i] .onclick = function () {alert (arg);};}) (i); // Argumente beim Aufrufen}}}}}}}}4. Fügen Sie eine Verschlussebene hinzu, und ich wird in Form einer lokalen Variablen an die Speicherfunktion übergeben
Funktion init4 () {var pary = document.getElementsByTagName ("p"); für (var i = 0; i <pary.length; i ++) {(function () {var temp = i; // Lokale variable Pary [i] .onclick = function () {alert (temp);}}) (); }}5. Fügen Sie eine Schließebene hinzu und geben Sie eine Funktion als Antwortereignis zurück (beachten Sie die subtile Differenz von 3)
Funktion init5 () {var pary = document.getElementsByTagName ("p"); für (var i = 0; i <pary.length; i ++) {pary [i] .onclick = function (arg) {return function () {// eine Funktion alarm (arg) zurückgeben; } }(ich); }}6. Mit Funktion implementiert, wird jedes Mal, wenn eine Funktionsinstanz erzeugt wird, ein Schließung erzeugt.
Funktion init6 () {var pary = document.getElementsByTagName ("p"); für (var i = 0; i <pary.length; i ++) {pary [i] .onclick = new function ("alert (" + i + ");"); // neu generiert eine Funktionsinstanz gleichzeitig}}}7. Verwenden Sie die Funktion, um sie zu implementieren, achten Sie auf den Unterschied zwischen 6
Funktion init7 () {var pary = document.getElementsByTagName ("P"); für (var i = 0; i <pary.length; i ++) {pary [i] .onclick = function ('alert ('+i+')')}}Das obige ist die kurze Diskussion über das JavaScript für die Schließung des Schleifens, die der Herausgeber Ihnen bringt. Ich hoffe, jeder wird Wulin.com mehr unterstützen ~