在Javascript中访问嵌套函数

Accessing nested functions in Javascript

本文关键字:嵌套 函数 访问 Javascript      更新时间:2023-09-26

我有以下代码:

function getRetailerName(retailerID) {
    var retailerName;
    db.transaction(function retName(qry) {
        qry.executeSql("SELECT retailerName FROM retailers WHERE token = '" + retailerID + "' ", [], function (tx, results1) {
            var len1 = results1.rows.length;
            var retailerName;
            for (var i1 = 0; i1 < len1; i1++) {
                retailerName = results1.rows.item(i1).retailerName;
                //alert(results1.rows.item(i1).retailerName);
            }
        });
        return retailerName;
    });
    alert(retName());
}

我试图从内部函数retName()中获取值,并最终调用getRetailerName()从数据库中获取值,但它一直给我一个错误,retName未定义?

我已经尽力了

你不能这样做,因为它是异步的。当您从函数返回时,查询还没有完成。相反,传递一个要执行的回调:

function getRetailerName(retailerID, callback) {
    var retailerName;
    db.transaction(function retName(qry) {
        qry.executeSql("SELECT retailerName FROM retailers WHERE token = '" + retailerID + "' ", [], function (tx, results1) {
            var len1 = results1.rows.length;
            var retailerName;
            for (var i1 = 0; i1 < len1; i1++) {
                retailerName = results1.rows.item(i1).retailerName;
                callback(retailerName);
            }
        });
    });
}
getRetailerName(1, function(name) {
    alert(name);
});

你不能(因为retName命名函数表达式只在它内部可用),你不应该尝试这样做(因为函数是异步的,它不会工作)。相反,使用回调:

function getRetailerName(retailerID, callback) {
    var retailerName;
    db.transaction(function retName(qry) {
        qry.executeSql("SELECT retailerName FROM retailers WHERE token = '" + retailerID + "' ", [], function (tx, results1) {
            var len1 = results1.rows.length;
            for (var i1 = 0; i1 < len1; i1++) {;
                callback(results1.rows.item(i1).retailerName);
            }
        });
    });
}
getRetailerName(1, alert.bind(window));