从匿名函数层内访问方法变量
Accessing method variable from within layers of anonymous functions
我正在尝试返回一个通过几个回调函数检索到的数字,但终其一生都无法弄清楚为什么范围不起作用。目标是返回一个只能在两个附加函数层中访问的值:
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);
});
}); }
相关文章:
- 如何从对象的原型方法访问JavaScript对象属性
- 从vuejs中的组件模板访问父方法
- 访问对象的最简单方法'的单独财产
- 有没有一种方法可以从光滑的网格访问插件
- 尝试访问方法的 OOP JavaScript
- 从匿名函数层内访问方法变量
- jQuery控件之外的访问方法
- 访问方法内部的变量's函数
- Angular2:模板中类的访问方法
- 在javascript中使用对象访问方法
- 如何在原型继承模式中访问方法
- async模块内部类的访问方法或
- 当用作其他对象的事件处理程序时,访问方法中的成员
- 在javascript中访问方法skillet.toString()
- 为什么我的applet在通过JavaScript访问方法时不能加载本地库?
- 另一个插件的访问方法
- 使用jquery脚本时如何访问方法
- Javascript -如何在没有'this'的情况下改变作用域和访问方法?
- 为什么我的主干模型奇怪地嵌套在集合中,需要钻取才能访问方法/属性?
- Javascript OOP -从原型设置器访问方法