**函數返回值**
* * * * *
使用一個函數的輸出作為另一個函數的輸入是很常見的,在同步方式下一般按以下方式編寫代碼:
```
var result = fn2(fn1("fn1的參數"))
```
使用 `fn1` 的輸出作為 `fn2` 的輸入,得到最后結果。
* * * * *
而在異步方式下,由于函數執行結果不是通過返回值,而是通過回調函數傳遞,因此一般按以下方式編寫代碼:
```
fn1("fn1的參數", function (output1) {
// output1 是 fn1 的實現里通過調用回調函數傳入的參數
fn2(output1, function (output2) {
// 同理這里要做的是對 output2 的處理
})
})
```
一個簡單的 `fn1` 和 `fn2` 的實現如下:
```
function fn1(param, callback) {
// 處理param, 然后可以通過同步或者異步的方式
// 調用callback, 然后把結果傳入回調函數
// 同步, 直接調用callback就行了
callback(param)
// 異步, 通過異步API調用callback
setTimeout(function () {
callback(param)
}, 1000)
}
```
* * * * *
**可以看到,這種方式其實就是一個回調函數套一個回調函數,套得太多很容易寫出 `>` 形狀的代碼。**