3

私が欲しいものを正確に説明する方法がわかりません。パラメータが参照ではなくローカルの VALUE である関数を定義したいと考えています。

作成したいオブジェクトのリストがあるとします

for(i = 0; i < 10; i++){
  var div = document.createElement("div");
  div.onclick = function(){alert(i);};
  document.appendChild(div);
}

この例では、どの div をクリックしても「10」というアラートが表示されると思います。それは変数 i の最後の値です。

パラメータが関数を指定した時点の値である関数を作成する方法/方法はありますか...それが意味をなす場合。

4

2 に答える 2

5

別の関数内に関数を作成する必要があります。

例えば:

div.onclick = (function(innerI) {
    return function() { alert(innerI); }
})(i);

このコードは、パラメーターを受け取り、そのパラメーターを使用する関数を返す関数を作成します。外部関数へのパラメーターは値渡しされるため、問題は解決します。

次のように、外側の関数を別の名前付き関数にする方が、通常はより明確です。

function buildClickHandler(i) {
    return function() { alert(i); };
}

for(i = 0; i < 10; i++){
    var div = document.createElement("div");
    div.onclick = buildClickHandler(i);
    document.appendChild(div);
}
于 2010-03-16T00:10:56.853 に答える
0

匿名関数を使用できます。

for(i = 0; i < 10; i++){
    (function(i){
        var div = document.createElement("div");
        div.onclick = function(){alert(i);};
        document.appendChild(div);
    })(i)
}
于 2010-03-16T00:12:24.173 に答える