変数スコープは関数で作成されるため、ハンドラーを返す関数を作成します。
function create_handler( scoped_row ) {
return function(myTrans) {
console.log(qryMfg.MFGID[scoped_row]);
};
}
...そしてループでそれを呼び出し、スコープが必要なものは何でも渡します。この場合はCurrentRow
...
for (var CurrentRow=0;CurrentRow < qryMfg.RecordCount;CurrentRow++) {
console.log(qryMfg.MFGID[CurrentRow]);
dbo.transaction( create_handler(CurrentRow) );
}
これで、個々のハンドラーは、各反復での呼び出しによって作成されたのと同じ一意のスコープで作成されます。
はその関数スコープに渡されたためCurrentRow
、各ハンドラーはパラメーターを介して独自のスコープ内の一意の値を参照しscoped_row
ます。
ハンドラーが関数から返されると、ハンドラーはに渡されますdbo.transaction
。
作成された関数から渡されても、元の変数スコープを保持するため、常にscoped_row
パラメーターにアクセスできます。
必要に応じて、操作全体を関数に入れることもできます。
function create_transaction( scoped_row ) {
console.log(qryMfg.MFGID[scoped_row]);
dbo.transaction( function(myTrans) {
console.log(qryMfg.MFGID[scoped_row]);
});
}
...合格する限り同じ結果になりCurrentRow
ます...
for (var CurrentRow=0;CurrentRow < qryMfg.RecordCount;CurrentRow++) {
create_transaction( CurrentRow );
}