我有以下代码:
var ids = new Array(5);
$(function(){
html5sql.process(sql,
function(transaction, results, rowsArray){
for(var i = 0; i < rowsArray.length; i++){
ids[i] = rowsArray[i].ID;
console.log(ids[i]); //returns the actual value for i
}
},
function(error, statement){
console.log("Error: " + error.message);
}
);
console.log(ids[0]); //returns undefined
});
如您所见,for循环内的打印输出正确的值。另一方面,当我在函数外打印时,我得到了未定义。 范围有什么问题?如何在函数外部获取数组的实际值?
由于
答案 0 :(得分:3)
var ids = [];
$( function () {
html5sql.process( sql, function () {
// LINE A: you are populating your array here
});
// LINE B: the array is still empty here
});
LINE A确实出现在源代码中的LINE B上方,但这并不一定意味着它会更快地执行。这是因为LINE A位于函数表达式中,并传递给process
函数。这个process
函数将在以后的某个时间调用该函数表达式。
因此,基本上,LINE B立即执行,而LINE A在将来的某个时刻执行。函数表达式可能绑定(作为处理程序)与SQL相关的事件。