使用Javascript的变量作用域
我的印象是我的变量范围应该是正确的,但是没有设置值。我想知道为什么会这样 这是我的密码:使用Javascript的变量作用域,javascript,Javascript,我的印象是我的变量范围应该是正确的,但是没有设置值。我想知道为什么会这样 这是我的密码: function getUserStatus() { var status; function querySuccess(tx, results) { var row = results.rows.item(0); console.log(row['id']); status = { question: row['
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
然而,当我检查status的第二个变量时,在函数范围之外,我得到了未定义的变量
我是否误解了Javascript变量范围或错误地声明了变量?我是Javascript新手。调用getUserStatus status时,其中的函数已定义但未执行,因此变量没有值(未定义),该值是尚未设置的变量的值。在代码中,应使用中的参数调用函数querySuccess
db.transaction(function(tx) {
tx.executeSql('SELECT id, women FROM calculator ORDER by id ASC LIMIT 1', [], querySuccess, errorCB);
});
调用该函数时没有参数 参见此处:
您的代码是异步执行的,因此在查询成功之前,执行实际上返回了一个未定义的值。我认为这不是javascript范围的问题。如何调用querySuccess()函数。您的代码中没有显示。我认为console.log(status);在调用querySuccess()之前正在工作。这就是为什么你没有定义。因为status没有任何初始值。您会被稍后调用的异步回调绊倒。因此,在调用异步回调之前以及在设置状态值之前,您正在执行
console.log(status)
。相反,您必须在回调本身中使用该值,或者从该回调调用函数并传递该值。当存在异步回调时,您不能像现在这样同步编程。有关Ajax调用的同一问题,请参阅本文,了解如何处理此问题的许多想法: