2015-11-07 33 views
1

我對理解函數有點問題。下面是代碼:LocalStorage QML返回

var _db 
var noteItems = {} 

_db.readTransaction(function(tx) { 
    var rs = tx.executeSql("SELECT * FROM note WHERE markerId=? ORDER BY markerid DESC", [markerId]); 
    var item 

    for (var i=0; i< rs.rows.length; i++) { 
     item = rs.rows.item(i) 
     noteItems[item.noteId] = item; 
     console.log(noteItems[item.noteId].x) 
    } 
)} 

數據庫的結構是markerId Intx Inty IntnoteText TEXT

我真的不明白這個函數返回什麼,我是QML的初學者。它是否返回一個對象數組?對象的結構是什麼?

事情是這樣的,也許:

所有的
noteItems { 
    markerId : 0 
    x: 0 
    y: 0 
    noteText: "example" 
} 

回答

0

首先,在你的問題的功能沒有正確關閉,你有不平衡的括號。它看起來有點像一個破舊的剪切和粘貼。

也就是說,假設您向我們展示了該函數的全部內容,您可以注意到它不包含任何return語句。因此,默認情況下,此函數返回undefined

無論如何,這樣做是有道理的。根據here_db.readTransaction接受一個回調函數,通過它可以傳遞一個事務對象(通常它被命名爲tx,但可以隨意選擇你喜歡的名稱),它根本不關心返回的值,所以返回undefined通過省略return聲明是完全合理的方法。

實際上,該函數正在填充一個名爲noteItems的對象,該對象位於外部範圍內,因爲名爲closure的概念,所以這是可能的。在這裏描述和討論主題是相當長的,但是我們可以總結說,在你的函數中,你可以訪問任何定義的變量,只要這些變量是包含在內的變量的一部分scope

導出對象的構建方式可以在官方文檔中找到,所以我不會在這個主題上進一步討論。你會發現它接近你所猜測的。

最後,正如here所述,QML不會影響JavaScript的自然範圍,所以我建議閱讀更多關於它的內容以充分理解發生的事情。 That其中一個是開始的好點。