3 回答

TA貢獻2065條經驗 獲得超14個贊
我不確定在哪里使用該函數,但是回調的要點是您將它們傳遞給異步運行的某個函數。它存儲了您的回調,當該函數完成需要執行的操作后,它將使用必要的參數調用回調。從前到后的示例可能是最好的。
想象我們有一個框架,其中有一個運行了很長時間的操作,該操作從數據庫中獲取一些數據。
function getStuffFromDatabase() {
// this takes a long time
};
由于我們不希望它同步運行,因此我們將允許用戶傳遞回調。
function getStuffFromDatabase(callback) {
// this takes a long time
};
我們將模擬長時間調用setTimeout;我們還將假裝我們從數據庫中獲得了一些數據,但是我們只是硬編碼一個字符串值。
function getStuffFromDatabase(callback) {
setTimeout(function() {
var results = "database data";
}, 5000);
};
最后,一旦有了數據,我們將調用框架函數用戶給我們的回調。
function getStuffFromDatabase(callback) {
setTimeout(function() {
var results = "database data";
callback(results);
}, 5000);
};
作為框架的用戶,您可以執行以下操作來使用該函數:
getStuffFromDatabase(function(data) {
console.log("The database data is " + data);
});
所以,你可以看到data(同response和postData在你的例子),從你通過回調函數來成 ; 當它知道數據應該是什么時,它將把數據提供給您。
您無法在回調中設置值并不能在回調之外使用它的原因是,回調本身直到稍后才發生。
// executed immediately executed sometime in the future
// | | by getStuffFromDatabase
// v v
getStuffFromDatabase(function(data) {
var results = data; // <- this isn't available until sometime in the future!
});
console.log(results); // <- executed immediately
當console.log運行時,的分配var results還沒有發生!
添加回答
舉報