タイトルについて申し訳ありません-私はそれを表現する方法を理解できませんでした。
シナリオは次のとおりです。
要素を構築する関数があります:
buildSelect(id,cbFunc,...)
buildSelect内では、次のことを行います。
select.attachEvent('onchange',cbFunc);
次のような配列もあります。
var xs = ['x1','x2','x3'...];
これらすべてを考えると、これを行うコードがいくつかあります。
for(var i = 0; i < xs.length; i++)
{
buildSelect(blah,function(){ CallBack(xs[i],...) },...);
}
問題は、これらの選択の1つでonchangeが起動されると、CallBack()に正しく移動しますが、最初のパラメーターが正しくないことです。たとえば、3番目の選択を変更すると、CallBack()がxs [2]で呼び出されることを期待します。代わりに、xs[3]などのさまざまなものを取得します。
これに少し変更すると:
for(var i = 0; i < xs.length; i++)
{
var xm = xs[i];
buildSelect(blah,function(){ CallBack(xm,...) },...);
}
CallBack()でまだ間違った値を取得しています。これはスコープ/クロージャーに関連しているとのことですが、何がわからないようです。
最初の選択で、最初のパラメーターをxs [0]として、2番目の選択でxs [1]を使用して、onchangeのCallBackを呼び出すようにします。ここで何が間違っているのでしょうか?
xsがグローバル変数であることを明確にする必要があります。
ありがとう