i = 函数中未定义,谁在函数中

i = Undefined in a function who is in a function

本文关键字:函数 未定义      更新时间:2023-09-26

在函数"Encaisser"中,"i"的值在for中是可以的,但是如果我在我的函数中调用"i","i"返回"Undefined。

function Encaisser()
{
   for(var i=1; i <= Nombre_ligne_en_caisse; i++)
   {    
      db.transaction(function(t,i){ t.executeSql('SELECT En_cour FROM Sequence WHERE Nom="Ticket_ID"', [], function(tx,rs,i){ 
         var row = rs.rows.item(0); 
         var Tick_ID = row['En_Cour']; 
         var Noma = window['Produit_en_caisse_' + i]  ;
         alert(i); //Undefined
         alert(Noma); //Undefined
      }, [])});
   alert(i); //If i put the alert here, its OK
   }
}

你知道为什么吗?

谢谢

问题是你的内部函数在这里定义了一个名为i的参数:

db.transaction(function(t,i){ ...

如果您打算将i作为外部函数的值,我建议您直接删除此参数。无论如何,db.transaction似乎并没有为此参数提供值。您可能还希望在单独的变量中关闭每次迭代时的 i 值,并在函数中使用它,如下所示:

var index = i;
db.transaction(function(t){ ...
     var Noma = window['Produit_en_caisse_' + index ];
     alert(index);

您可以在db.transaction回调和t.executeSql回调中重新定义i。在t.executeSql回调中,i必须是未定义的。

如果要从 for 循环访问 i 的值,则需要在回调中重命名这些参数。