我在3个循环中有一个使用3个变量的Web SQL插入查询 - 一个循环使用l,第二个使用k,第三个使用i。
我正在尝试在插入查询的回调中使用l,k和i,但是当我将其注销时,它们将以未定义的形式出现。
有谁知道这个解决方案?
tx.executeSql('INSERT INTO items (parameter1, parameter2)' + ' VALUES(?,?);',[1,2],
function(tx, results,l,k,i){
console.log("l =", l)
console.log("k =", k)
console.log("i =", i)
}
);
答案 0 :(得分:1)
因此,如果我正确理解您的问题,变量l
,k
和i
已经在回调函数范围之外定义。
如果您尝试将它们作为参数添加到回调函数中,就像在代码示例中一样,您实际上是在创建同名的新变量。这有时被称为“阴影”。由于回调只获得分配给这些参数的两个参数(tx
和result
),因此另一个参数l
,k
和i
只是{{1 }}
修复代码所需要做的就是从回调中删除参数undefined
,l
和k
,以避免出现阴影:
i
回调函数在窗口级别执行,因此您的变量也需要在窗口级别声明。
答案 1 :(得分:0)
我猜您在l,k上遇到问题,并且由于回调花费的时间比预期的长,我变得未定义或被替换。 (至少我的情况就是这样)。
您可以创建一个函数作为接收所有参数的回调,然后使用bind()作为该回调传递
。这是您的情况的一个示例:
function cb(l,k,i,tx,results)
{
console.log("l =", l)
console.log("k =", k)
console.log("i =", i)
}
xcb = cb.bind(null,"one","two","three");
tx.executeSql('INSERT INTO items (parameter1, parameter2)' + ' VALUES(?,?);',[1,2], xcb, null );
在使用bind()的行中,您可以传递l,k,i的变量或值。