var thunk = function () {
return x + 5;
};
function f(thunk){
return thunk() * 2;
}
編譯器的"傳名調用"實現(xiàn)酌畜,往往是將參數(shù)放到一個臨時函數(shù)之中蔓肯,再將這個臨時函數(shù)傳入函數(shù)體。這個臨時函數(shù)就叫做 Thunk 函數(shù)瞪讼。
function run(fn) {
var gen = fn();
function next(err, data) {
var result = gen.next(data);
if (result.done) return;
result.value(next);
}
next();
}
run(gen);
上面代碼的 run 函數(shù)瞻坝,就是一個 Generator 函數(shù)的自動執(zhí)行器蛛壳。內部的 next 函數(shù)就是 Thunk 的回調函數(shù)。 next 函數(shù)先將指針移到 Generator 函數(shù)的下一步(gen.next 方法),然后判斷 Generator 函數(shù)是否結束(result.done 屬性)炕吸,如果沒結束伐憾,就將 next 函數(shù)再傳入 Thunk 函數(shù)(result.value 屬性),否則就直接退出