2015-06-19 86 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

非常感謝!我明白。 –