从匿名函数的层内访问方法变量

时间:2016-02-05 23:01:10

标签: javascript variables scope

我试图返回一个通过几个回调函数检索的数字,但是在我的生活中不能弄清楚为什么范围不起作用。目标是返回一个只能在另外两个函数层中访问的值:

function getLastPosition(db) {
  var highest; // Declared in method's scope

  db.transaction(function (tx) {
    tx.executeSql('SELECT max(position) AS highest FROM FRUIT', [], function(tx, result) {
      highest = result.rows.item(0).highest;
      alert(highest); // Displays the number 2, as it should.
    });
  });

  alert(highest); // Displays 'undefined'!
  return highest;
}

我已经阅读Ryan Morr's guide但仍然无能为力......

编辑:所以事实证明这不是范围问题,而是异步执行问题。返回语句在数据库调用完成之前执行。那么,我修改过的问题就是如何在不诉诸更多回调的情况下获得最高价值。

1 个答案:

答案 0 :(得分:0)

不知道您的库,但db建议您对数据库进行异步ajax调用。因为它是异步的,所以向服务器发出请求并继续执行尚未定义最高值的下一行。稍后当浏览器收到来自ajax调用的响应时,将执行回调函数并设置最高值。

您可以将回调函数传递给您的函数,并使用最高值替换您的第一个警报,而不是返回最高级别。

function getLastPosition(db, callback) {
  var highest;
  db.transaction(function (tx) {
    tx.executeSql('SELECT max(position) AS highest FROM FRUIT', [], function(tx, result) {
      highest = result.rows.item(0).highest;
      callback(highest);
   });
 });  }