使用Javascript的可变范围

时间:2015-02-10 04:01:26

标签: javascript

我的印象是我的变量范围应该是正确的,但是值没有设置。我想知道为什么会这样。

这是我的代码:

function getUserStatus() {


    var status;

    function querySuccess(tx, results) {
        var row = results.rows.item(0);
        console.log(row['id']);
        status = {
            question: row['id']
        };
    }

    function errorCB(err) {
        console.log(err);
    }

   db.transaction(function(tx) {
        tx.executeSql('SELECT id FROM calculator ORDER by id ASC LIMIT 1', [], querySuccess, errorCB);
    });

    console.log(status);
    return status;
}

现在,querySuccess()函数中的状态变量设置正确 - 我得到的值为1。

但是,当我检查状态的第二个变量时,在函数范围之外,我得到了未定义。

我是否误解了Javascript变量范围或错误地声明了我的变量?我是Javascript的新手。

3 个答案:

答案 0 :(得分:0)

当调用getUserStatus状态时,其中的函数被定义但未被执行,因此您的变量没有值(未定义),这是未设置的var的值。

答案 1 :(得分:0)

在您的代码中,您应该使用

中的参数调用函数querySuccess
db.transaction(function(tx) {
        tx.executeSql('SELECT id, women FROM calculator ORDER by id ASC LIMIT 1', [], querySuccess, errorCB);
    });

调用该功能时没有参数。

答案 2 :(得分:0)

见这里: Scope in JavaScript / jQuery

您的代码执行异步,因此执行在您的查询成功之前返回一个未定义的值。