2015-11-07 37 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其中一个是开始的好点。