2015-06-19 62 views
2

我想了解铬扩展代码,它是由JavaScript编写的。但有一个代码与我不明白的回调函数有关。铬扩展中的JavaScript回调函数

function dumpBookmarks(query) { 
    var bookmarkTreeNodes = chrome.bookmarks.getTree(
function(bookmarkTreeNodes) { 
    $('#bookmarks').append(dumpTreeNodes(bookmarkTreeNodes, query)); 
}); 
} 

对于我的了解,我发现回拨功能应该运行后,这意味着在内部功能应该来自VAR bookmakrTreeNodes bookmarkTreeNodes(来自chrome.bookmakrs.getTree功能)。但是,当我将var bookmarkTreeNode更改为其他任何内容并将bookmarkTreeNodes保留在内部函数中时,该程序运行良好。这个结果与我的想法相矛盾。

bookmakrTreeNodes里面的函数来自哪里?在chrome.bookmarks.getTree()函数之前它怎么会出现?

谢谢!

回答

0

您对回调的理解不正确。您传递给getTree的函数采用参数bookmarkTreeNodes,与您在函数外声明的var bookmarkTreeNodes无关。

试想一下:函数chrome.bookmarks.getTree是这样写的。

chrome.bookmarks.getTree = function (cb) { 
    var bookmarkTreeNodes; 
    /* do some work to get the tree nodes */ 
    cb(bookmarkTreeNodes); 
    // maybe return something here. 
    //This is the value your "var bookmarkTreeNodes" would take on eventually 
    //but as you can see, it has nothing to do with what is passed to your callback. 
} 

现在你看到回调的参数来自哪里?我建议你阅读一些关于处理回调的更多内容,因为这是JavaScript的一个非常重要的部分。

+1

非常感谢!我明白。 –