javascript回调函数参数

时间:2014-03-03 15:30:58

标签: javascript cordova parameters callback

我想使用javascript调用回调函数,正如您从http://docs.phonegap.com/en/3.0.0/cordova_storage_storage.md.html#database_size

的示例代码中看到的那样
function queryDB(tx) {
    tx.executeSql('SELECT * FROM DEMO', [], querySuccess, errorCB);
}

function querySuccess(tx, results) {
    console.log("Returned rows = " + results.rows.length);
    // this will be true since it was a select statement and so rowsAffected was 0
    if (!results.rowsAffected) {
        console.log('No rows affected!');
        return false;
    }
    // for an insert statement, this property will return the ID of the last inserted row
    console.log("Last inserted row ID = " + results.insertId);
}

function errorCB(err) {
    alert("Error processing SQL: "+err.code);
}

var db = window.openDatabase("Database", "1.0", "Cordova Demo", 200000);
db.transaction(queryDB, errorCB);

调用方法“queryDB”时没有任何参数,但该函数被定义为接收变量“tx”。来自PHP,我无法理解它是如何工作的,因为它确实如此。 还有querySuccess接收2个参数,也可以工作。

我的问题是我需要发送1个自己的参数,所以我修改了queryDB的调用,如下所示:

var db = window.openDatabase("Database", "1.0", "Cordova Demo", 200000);
db.transaction(queryDB(myParam), errorCB);

function queryDB(tx, myParam) {
    tx.executeSql('SELECT * FROM' + myParam, [], querySuccess, errorCB);
}

但是不起作用。

1)怎么会收到未发送的params? 2)如何在不破坏它的情况下添加自己的参数?

3 个答案:

答案 0 :(得分:0)

试试这个:

db.transaction(function() { queryDB(tx, myParam); }, errorCB);

function queryDB(tx, myParam) {
    //logic here
}

事务函数正在寻找不包含参数的回调方法。你可以通过分配一个匿名函数来“劫持”这个函数,该函数用参数调用你想要的函数。

答案 1 :(得分:0)

写作时

db.transaction (queryDB, errorCB);

你作为参数传递了函数本身,但如果你试试这个:

db.transaction (queryDB(myParam), errorCB);

您将作为参数传递函数的结果,这将产生错误。

db.transacción接收参数是2个函数,如果需要传递自定义参数,只需在声明中写入

function queryDB(tx, myParam) {
    //Using your myParam
    tx.executeSql('SELECT * FROM DEMO', [], querySuccess, errorCB);
}
...
db.transaction(queryDB, errorCB);

请记住,javascript是一种解释性编程语言,不是面向对象的

答案 2 :(得分:0)

好的,所以我想我找到了答案。 从这里阅读http://theelitist.net/passing-additional-arguments-to-a-callback-function-in-javascript 我已经意识到Dawson Loudon的响应几乎已经完成,但是他错过了应该在第一个调用第二个函数的函数上传递的“tx”变量,即:

db.transaction(function(tx) { queryDB(tx, myParam); }, errorCB);

function queryDB(tx, myParam) {
    //logic here
}

感谢您的时间和帮助。