**函数返回值**
* * * * *
使用一个函数的输出作为另一个函数的输入是很常见的,在同步方式下一般按以下方式编写代码:
```
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)
}
```
* * * * *
**可以看到,这种方式其实就是一个回调函数套一个回调函数,套得太多很容易写出 `>` 形状的代码。**