2011-08-25 118 views
4

可能有人请解释在下面的代码片段function(tx),从这个页面:http://www.webkit.org/demos/sticky-notes/。 在哪里以及如何分配?我查看了here的信息,但仍然处于黑暗中。JavaScript的参数匿名函数

我想我明白的是,该对象的saveAsNew方法被定义为第一创建的时间戳,并创建一个本地引用本身(注=此),然后一个匿名函数调用交易方法分贝对象,提供给该方法的参数是还具有一个参数TX另一个匿名函数。但我不明白tx是从哪里来的。

. 
    . 
    . 
     saveAsNew: function() 
     { 
      this.timestamp = new Date().getTime();   
      var note = this; 
      db.transaction(function (tx) 
       { 
       tx.executeSql("INSERT INTO WebKitStickyNotes (id, note, timestamp, left, top, zindex) VALUES (?, ?, ?, ?, ?,     ?)", [note.id, note.text, note.timestamp, note.left, note.top, note.zIndex]); 
       }); 
    }, 
    . 
    . 
    . 

FULL CODE PASTE

回答

0

您也可以使用任何变量,只要在你的匿名方法定义使用相同的变量。在调用匿名方法时,事务方法将传递一个值作为第一个参数,并将其分配给tx。

0

如果我知道transaction()是我也许能帮助你更多。

但我相信这是函数返回的东西。

像click有返回

所以在transaction代码的变量发送到功能,然后您可以命名,并在代码中使用某个地方event


从前面的代码:

db = openDatabase("NoteTest", "1.0", "HTML5 Database API example", 200000); 

你必须寻找到什么openDatabase确实具有transaction功能。

You can read up on openDatabase() here

0

功能saveAsNew返回需要TX作为自变量的函数:

var new = saveAsNew(); 
new(tx); 

在何处TX来源,这是不可能的,从这个片段的话。

0

的db.transaction()函数必须采取一个参数,是一个函数,它的一个参数(函数(TX)中的例子)。

它可能记录为db.transaction(回调)。

TX是(你的情况的匿名函数(TX))由db.transaction()函数发送到回调函数的参数。

+0

感谢您的解释。 – Tim

1

首先,tx是一个参数的定义。您可以选择任何名称,也可以是bar。如果你想知道“谁”是通过这个说法,那么它可能是db.transaction它不是从定义功能

function foo(bar) { 

} 

不同。您正在将该功能作为callback[Wikipedia]传递。某处db.transaction将调用:

callback(transaction); 

也许这个例子有助于其理解:

function hello(callback) { 
    // do some very important world changing computations... then: 
    callback('Hello '); 
} 

hello(function(foobar) { 
    alert(foobar + 'Tim!'); 
}); 
// alerts 'Hello Tim!' 

这里,hello函数传递一个参数给回调函数。

+0

谢谢。我需要一个新的表意文字:启蒙+混乱。 – Tim

+0

@Tim:如果您仍然困惑,请告诉我;) –

+0

我认为雾正在清理。该程序调用函数A并告诉A调用正在传递给A的函数B作为参数。如果B本身需要一个参数,程序就是“信任”A来提供它。 – Tim

0

你的代码是相同的:

saveAsNew: function() 
    { 
     this.timestamp = new Date().getTime();   
     var note = this; 
     function booga(tx) 
     { 
      tx.executeSql("INSERT INTO WebKitStickyNotes (id, note, timestamp, left, top, zindex) VALUES (?, ?, ?, ?, ?,     ?)", [note.id, note.text, note.timestamp, note.left, note.top, note.zIndex]); 
     } 
     db.transaction(booga); 
}, 

在什么地方 “TX” 来自于 “booga(TX)”?答案:任何一个调用booga的人都会传递一个参数,tx是我们给这个参数的名字。

0

函数调用db.transaction()本身需要一个参数。该参数本身是db.transaction()将调用的函数,当它调用该函数时,它将传递一个参数。名称tx可以是任何东西,它只是该函数的第一个参数的名称。

您的代码可能已被写入与要传递到db.transaction()作为一个匿名函数就像你在这里做的是功能:

db.transaction(function (tx) 
{ 
    tx.executeSql("INSERT INTO WebKitStickyNotes (id, note, timestamp, left, top, zindex) VALUES (?, ?, ?, ?, ?,     ?)", [note.id, note.text, note.timestamp, note.left, note.top, note.zIndex]); 
}); 

,或者它也可以写成这样的地方是一个小更明显的是什么正在发生的事情,但不作为紧凑:

function writeSql(tx) { 
    tx.executeSql("INSERT INTO WebKitStickyNotes (id, note, timestamp, left, top, zindex) VALUES (?, ?, ?, ?, ?,     ?)", [note.id, note.text, note.timestamp, note.left, note.top, note.zIndex]); 
} 

db.transaction(writeSql);