Thunk函数
什么是Thunk函数?
1 2 3 4 5 |
function fn(a){ console.log(a*5); } fn(3-2); |
传入的参数3-2这个表达式在计算策略上不同,比如:c++是将3-2计算出结果再乡下传递,而传名调用则是把内容传入函数体内:console.log((3-2)*5);
Thunk函数则是 thunk = function(){
return 3-2;
}
function fm(thunk){
return thunk()*5;
}
JavaScript的Thunk函数
fs.readFile(fileName, callback);
1 2 3 4 5 |
var Thunk = function (fileName){ return function (callback){ return fs.readFile(fileName, callback); }; }; |
Generator 函数的流程管理
Generator函数的自动执行
1 2 3 4 5 6 7 8 9 10 11 |
function* gen() { // ... } var g = gen(); var res = g.next(); while(!res.done){ console.log(res.value); res = g.next(); } |
Thunk函数的自动流程管理
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
function run(fn) { var gen = fn(); function next(err, data) { var result = gen.next(data); if (result.done) return; result.value(next); } next(); } function* g() { // ... } run(g); |