Javascript 通过引用传递的参数
我有以下JavaScript功能:Javascript 通过引用传递的参数,javascript,function,reference,arguments,Javascript,Function,Reference,Arguments,我有以下JavaScript功能: function insertIntoTable(title, text, sketchFileName, categoryId) { var db = window.openDatabase('xxx', '1.0', 'xxx database', 5*1024*1024); db.transaction( function (tx) { if (sketchFileName == '')
function insertIntoTable(title, text, sketchFileName, categoryId)
{
var db = window.openDatabase('xxx', '1.0', 'xxx database', 5*1024*1024);
db.transaction(
function (tx) {
if (sketchFileName == '')
{
tx.executeSql('INSERT INTO TableXXX (title, content, created, categoryID) VALUES (?, ?, ?, ?)',
[title, text, Date.now(), categoryId],
function (transaction, resultSet) {
if (resultSet.rowsAffected) {
myNameSpace.returnedId = resultSet.insertId;
}
}, handleSQLError);
}
}, handleSQLError);
);
}
function insertIntoTable(title, text, sketchFileName, categoryId, setReturnedId)
{
setReturnedId( resultSet.insertId );
}
现在我使用一个全局变量,myNameSpace.returnedId
,来获取insertId
有没有办法向引用myNameSpace.returnedId的函数
insertIntoTable
添加新参数?将函数更改为:
function insertIntoTable(title, text, sketchFileName, categoryId, nameSpace) {
...
...
nameSpace.returnedId = resultSet.insertId; // assign this here
并通过以下方式调用该函数:
insertIntoTable(someTitle, someText, someSketchFileName, someCategoryId, myNamespace)
您将传入对myNamespace的引用(在函数中称为nameSpace
)。
然后,您将有权访问所有
myNameSpace
的属性(并可以为它们赋值)。您可以使用两个参数引用变量:
function insertIntoTable(title, text, sketchFileName, categoryId, nameSpace, variable)
{
...
nameSpace[variable] = resultSet.insertId;
}
可以这样称呼:
insertIntoTable( ..., myNameSpace, 'returnedId' );
insertIntoTable( ..., function(value){ myNameSpace.returnedId = value } );
另一种方法是使用setter函数:
function insertIntoTable(title, text, sketchFileName, categoryId)
{
var db = window.openDatabase('xxx', '1.0', 'xxx database', 5*1024*1024);
db.transaction(
function (tx) {
if (sketchFileName == '')
{
tx.executeSql('INSERT INTO TableXXX (title, content, created, categoryID) VALUES (?, ?, ?, ?)',
[title, text, Date.now(), categoryId],
function (transaction, resultSet) {
if (resultSet.rowsAffected) {
myNameSpace.returnedId = resultSet.insertId;
}
}, handleSQLError);
}
}, handleSQLError);
);
}
function insertIntoTable(title, text, sketchFileName, categoryId, setReturnedId)
{
setReturnedId( resultSet.insertId );
}
可以这样称呼:
insertIntoTable( ..., myNameSpace, 'returnedId' );
insertIntoTable( ..., function(value){ myNameSpace.returnedId = value } );
为什么不直接用myNameSpace作为参数调用函数呢?因为我不知道它是如何工作的。嗯??什么是有效的?向函数中添加一个参数-将其命名为myNameSpace或任何其他名称,然后仅使用对象myNameSpace调用函数。然后,您可以访问和修改其上的任何属性(如returnId)。(不确定我是否理解你,但我添加了这个作为答案)。我使用了你的第二个选项,它更通用,更可重用。