Возможно, вы правы насчет ошибки.Решение этой проблемы заключается в том, чтобы обернуть анонимную функцию внутри цикла, которая содержит новую и неизменную переменную i
для вложенного кода, чтобы увидеть.
for (var i=0;i<2;i++) {
(function(i) {
dbo.transaction(
function(myTrans) {
myTrans.executeSql(
'UPDATE myTable SET myField=0 WHERE myID=?'
,[i]
);
}
);
})(i);
}
ECMAScript Harmony (предложение дляследующая версия JavaScript) включает в себя новое ключевое слово, let
, что сделает его чище.Это будет работать так:
for (var i=0;i<2;i++) {
let (i = i) {
dbo.transaction(
function(myTrans) {
myTrans.executeSql(
'UPDATE myTable SET myField=0 WHERE myID=?'
,[i]
);
}
);
}
}
Возможно даже заменить просто var i
на let i
, но, насколько я знаю, консенсус по этому вопросу еще не достигнут.