所以我从一些网站上阅读了教程,他们做了类似的事情。
function populateDB(tx) {
tx.executeSql('DROP TABLE IF EXISTS DEMO');
tx.executeSql('CREATE TABLE IF NOT EXISTS DEMO (id unique, data)');
tx.executeSql('INSERT INTO DEMO (id, data) VALUES (1, "First row")');
tx.executeSql('INSERT INTO DEMO (id, data) VALUES (2, "Second row")');
}
function errorCB(err) {
alert("Error processing SQL: "+err.code);
}
function successCB() {
alert("success!");
}
var db = window.openDatabase("Database", "1.0", "Cordova Demo", 200000);
db.transaction(populateDB, errorCB, successCB);
在最后一行,他们从对象db调用方法事务,并且在参数字段中有3个函数,但不是函数populateDB,errorCB也需要一个参数?这个论点在哪里被召唤?
答案 0 :(得分:2)
数据库运行时将在需要时调用这些函数,并将传入参数。在“db.transaction”函数调用中,您将引用传递给函数。此时,不需要函数参数,因为您只是要识别要调用的函数。
答案 1 :(得分:2)
这些是回调,这意味着transaction
方法将根据成功或失败调用一个或另一个CB函数。
该方法可能会这样:
db.transaction = function(populateDB, errorCB, successCB) {
// Try to do the requested action
var tx = performTransaction(populateDB);
// If the action failed, call the error callback,
// otherwise call the success callback
if (tx==false) {
var err = new TransactionError();
return errorCB(err);
} else {
return successCB(tx);
}
}
答案 2 :(得分:1)
这些函数根据回调的设计方式自动接收参数。传入对函数的引用,当回调使用该引用时,它会根据整个机制的构建方式填充参数。基本上,事务对象知道调用你已经提供引用的方法并传入它想要传入的任何内容。由你决定收集它(正如你所做的那样)。
这有点令人困惑的唯一原因是因为你没有破解交易功能。如果你这样做,你会看到它调用这些函数并传入你稍后收集的值)。
答案 3 :(得分:0)
javascript有几种获取/设置函数内部数据的方法, 请参阅:方法 - 调用,应用和参数 var