我是JavaScript和編程新手,我已閱讀至少8或9個不同的示例/教程來解釋回調函數。從我所知道的情況來看,這是一個給新程序員帶來很多麻煩的概念。我明白爲什麼要使用它們,以及如何使用它們,但我仍然不確定我是否理解爲什麼他們工作。我寫了下面的例子:我該如何剖析這個JavaScript回調函數的例子?
function a(callback) {
setTimeout(function() {
console.log("First");
callback();
}, 2000);
}
function b(callback) {
setTimeout(function() {
console.log("Second");
callback();
}, 1000);
}
function c() {
console.log("Third");
}
function d() {
a(function() {
b(function() {
c();
});
});
}
此代碼的工作作爲功能的運行,第一,儘管它需要的時間最長,函數B運行第二,即使它比C需要更長的時間。我知道我已經在函數a和b中插入了一個名爲'callback'的參數,並且這些函數將運行無論什麼時候運行它們的名稱,而是插入'callback'參數名稱的函數,如'callback );」線。例如,如果我在控制檯中鍵入a(b);
,結果爲First,Second。如果我在控制檯中輸入b(c);
,我會得到Second,Third。
我沒有真正理解的部分是我在函數d中編寫的,在這裏我運行了所有3個函數。函數d執行函數a,但在我看來,它包含一個匿名函數作爲參數,它運行函數b,它還包含一個匿名函數作爲參數,它運行函數c。這裏發生了什麼?爲什麼在控制檯中輸入a(b(c));
不起作用?
我想我沒有真正看到函數d和函數a和b中的回調參數之間的鏈接。具體來說,當我做a(b);
時,我很容易看到它是如何工作的。但是,當我做a(function() {b();})
,產生相同的結果,我不是很理解它爲什麼工作。
有人會解釋函數d是如何工作的,或者爲什麼a(function() {b();})
與a(b);
相同?
因爲一個調用b調用c ..... – epascarello