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

Accessing method variable from within layers of anonymous functions

本文关键字:访问 方法 变量 函数      更新时间:2023-09-26

我正在尝试返回一个通过几个回调函数检索到的数字,但终其一生都无法弄清楚为什么范围不起作用。目标是返回一个只能在两个附加函数层中访问的值:

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;
}

我已经阅读了瑞安·莫尔的指南,但仍然毫无头绪......

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

不知道你的库,但 db 建议你正在对数据库进行异步 ajax 调用。 因为它是异步的,所以会向服务器发出请求,并继续执行到尚未定义 highest 的下一行。 稍后,当浏览器收到来自 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);
   });
 });  }