Jquery / Javascript中的变量范围

时间:2012-01-05 01:51:33

标签: javascript jquery html scope

我有以下代码:

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循环内的打印输出正确的值。另一方面,当我在函数外打印时,我得到了未定义。 范围有什么问题?如何在函数外部获取数组的实际值?

由于

1 个答案:

答案 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相关的事件。