mirror of
https://github.com/ruanyf/es6tutorial.git
synced 2025-05-26 03:32:20 +00:00
doc(async): Thunk函数的ES6版本
This commit is contained in:
parent
1764e48fdf
commit
40b5f23e0b
@ -273,6 +273,7 @@ function f(thunk){
|
||||
```
|
||||
|
||||
上面代码中,函数f的参数`x + 5`被一个函数替换了。凡是用到原参数的地方,对`Thunk`函数求值即可。
|
||||
|
||||
这就是Thunk函数的定义,它是"传名调用"的一种实现策略,用来替换某个表达式。
|
||||
|
||||
### JavaScript语言的Thunk函数
|
||||
@ -299,6 +300,7 @@ var Thunk = function (fileName){
|
||||
任何函数,只要参数有回调函数,就能写成Thunk函数的形式。下面是一个简单的Thunk函数转换器。
|
||||
|
||||
```javascript
|
||||
// ES5版本
|
||||
var Thunk = function(fn){
|
||||
return function (){
|
||||
var args = Array.prototype.slice.call(arguments);
|
||||
@ -308,6 +310,15 @@ var Thunk = function(fn){
|
||||
}
|
||||
};
|
||||
};
|
||||
|
||||
// ES6版本
|
||||
var Thunk = function(fn) {
|
||||
return function (...args) {
|
||||
return function (callback) {
|
||||
return fn.call(this, ...args, callback);
|
||||
}
|
||||
};
|
||||
};
|
||||
```
|
||||
|
||||
使用上面的转换器,生成`fs.readFile`的Thunk函数。
|
||||
@ -317,6 +328,18 @@ var readFileThunk = Thunk(fs.readFile);
|
||||
readFileThunk(fileA)(callback);
|
||||
```
|
||||
|
||||
下面是另一个完整的例子。
|
||||
|
||||
```javascript
|
||||
function f(a, cb) {
|
||||
cb(a);
|
||||
}
|
||||
let ft = Thunk(f);
|
||||
|
||||
let log = console.log.bind(console);
|
||||
ft(1)(log) // 1
|
||||
```
|
||||
|
||||
### Thunkify模块
|
||||
|
||||
生产环境的转换器,建议使用Thunkify模块。
|
||||
|
Loading…
x
Reference in New Issue
Block a user