ネチズンは、次のHTMLに示されているように、各出力が各Pをクリックする代わりに5であるのはなぜで、対応する1、2、3、4、5に警告します。
<html> <head> <Meta http-equiv = "content-type" content = "text/html; charset = utf-8"/> <title>閉じるデモ</ittitle> <スクリプトタイプ= "テキスト/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); // calluments}}}}}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(){// function a alert(arg); } }(私); }}6。実際、関数で実装されていますが、関数インスタンスが生成されるたびに、閉鎖が生成されます。
function init6(){var pary = document.getElementsByTagname( "P"); for(var i = 0; i <pary.length; i ++){pary [i] .onclick = new function( "alert(" + i + ");"); // newは一度に1つの関数インスタンスを生成します}}}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をもっとサポートすることを願っています〜