Chrome扩展中的JavaScript回调函数

3

我正在尝试理解用JavaScript编写的Chrome扩展程序代码。但有一个与回调函数相关的代码我不明白。

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

根据我的理解,回调函数应该在后面运行,这意味着内部函数中的bookmarkTreeNodes应该来自于var bookmarkTreeNodes(来自于chrome.bookmarks.getTree函数)。但是,当我把var bookmarkTreeNodes改成其他任何东西,并保持内部函数中的bookmarkTreeNodes不变时,程序仍然能够正常运行。这个结果和我的想法相矛盾。
那么内部函数中的bookmarkTreeNodes从哪里来?它如何在chrome.bookmarks.getTree()函数之前出现?
谢谢!
1个回答

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
非常感谢!我明白了。 - Hao Wu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接