您必須在函數中定義函數(即回調函數)。
1 function function1(){
2 function2(function(obj) {
3 console.log(obj); //logs obj.
});
}
4 function function2(callbackFn){
//do stuff with DB and get obj
console.log(obj); //logs obj.
5 callbackFn(obj);
}
function2
可以從很多地方在被調用一次,不只是function1
。
如果你可以更具體地瞭解你不瞭解的內容,那麼你可能會得到更好的答案。
函數是值,就像數字,字符串和對象一樣。
這是函數式編程的核心基礎,可能是你還沒有掌握的東西。在JavaScript中,和許多語言一樣,函數不是特殊的*。這與C或Java等語言不同,其中函數/方法與您在代碼中處理的常見值不同。
2; // Here is a number
var a = 2; // I can assign it to a variable
console.log(2); // I can pass it as a function argument
function() {} // Here is a function
var a = function() {}; // I can assign it to a variable
console.log(function() {}); // I can pass it as a function argument
function jim() {} // This function's name is jim
var a = jim; // I can assign it to a variable
console.log(jim); // I can pass it as a function argument
(function() {})(); // I can call a function without giving it any names
jim(); // I can call a named function
a(); // I can call a function via a variable
jim.call(this, arg1); // Or I can get complicated
因此,我們可以聲明函數並將它們傳遞給它們,分別調用它們。現在,我們開始的代碼如何?
- 聲明一個叫
function1
新功能,它沒有參數
- 當
function1
被調用,調用function2
有一個參數,一個新的匿名函數,它接受一個obj
參數
- 當匿名函數被調用,調用
console.log
與通過了obj
- 值聲明一個名爲
function2
新的功能只有一個參數callbackFn
- 打電話過去了
callbackFn
帶一個參數值時,obj
我們從某處
變得如此的聲明順序爲1,4,2;執行順序爲2,5,3。
*好的,它們有點特別。他們的定義是hoisted,您可以執行它們代表的代碼,並且其聲明創建scope和closures。但這些都是另一次的問題。
這實際上是一個JavaScript問題,而不是nodejs專有的問題。 – OrangeDog
真的嗎?我認爲只有nodejs是異步的,而不是整個JS。當然,我只使用JS中的HTML,也許這就是我的困惑來自哪裏.. – Araklaj
AJAX - *異步* JavaScript和XML – OrangeDog