Вам необходимо вернуть только что созданный экземпляр mydb
, созданный в функции initDB()
, а затем использовать возвращенный экземпляр.
Если вы переназначаете новое значение параметру, который передается вфункция (это то, что вы делаете), она должна быть возвращена или изменения будут потеряны.
Обратите внимание, что если вы передаете объект функции (что вы не делаете), выможно изменить свойства этого объекта, и эти изменения будут сохранены вне области действия этой функции.
function initDB(mydb) {
mydb.initialized = true;
}
mydb.initialized = false;
initDB(mydb);
// mydb.initialized => true
vs ...
function initDB(mydb) {
mydb = new DB(); // new reference
mydb.initialized = true;
}
mydb.initialized = false;
initDB(mydb);
// mydb.initialized => false
Конечно, вы также передаетепримитивное логическое значение, а не объект.Примитивы передаются по значению, поэтому вы должны вернуть только что созданный mydb
.
ОБНОВЛЕНИЕ
Вы также неправильно используете обработчики переданных транзакций.Посмотрите на телефонную вики еще раз, чтобы увидеть, как они присваивают ссылки на функции переменным и передают эти ссылки в методы транзакции.Как и сейчас, вы вызываете функции вместо того, чтобы передавать их.
Итак, вместо этого (что вы делаете сейчас):
function errorHandler(tx, error) {
alert("error");
return true;
}
function nullDataHandler(tx, results) { }
tx.executeSql('insert into celebs (id,name) VALUES (1,"Kylie Minogue");', [], nullDataHandler(tx, results), errorHandler(tx, error));
сделайте это:
var errorHandler = function (tx, error) {
alert("error");
return true;
}
var nullDataHandler = function(tx, results) { }
tx.executeSql('insert into celebs (id,name) VALUES (1,"Kylie Minogue");', [], nullDataHandler, errorHandler);
Надеюсь, это прояснит ситуацию.Кроме того, помните, если это ответило на ваш вопрос, поставьте ему оценку и отметьте его как ответ для ссылки на будущих посетителей.