javascript chrome 扩展中的回调函数

javascript callback function in chrome extension

我正在尝试理解 chrome 扩展代码,它是由 javascript 编写的。但是有一段回调函数相关的代码我没看懂

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

根据我的理解,我发现回调函数应该在运行后面,这意味着内部函数中的bookmarkTreeNodes应该来自var bookmakrTreeNodes(来自chrome.bookmakrs.getTree函数)。但是,当我将 var bookmarkTreeNodes 更改为其他任何内容并保持内部函数中的 bookmarkTreeNodes 相同时,程序 运行 很好。这个结果和我的想法有冲突。

内部函数中的bookmakrTreeNodes从哪里来?它怎么会出现在 chrome.bookmarks.getTree() 函数之前?

谢谢!

您对回调的理解不正确。您传递给 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.

的一个非常重要的部分