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.
的一个非常重要的部分
我正在尝试理解 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.
的一个非常重要的部分