我正在尝试理解由javascript编写的chrome扩展代码。但是有一个我不了解的与回调函数相关的代码。
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的重要组成部分。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句