var thunk = function () {
return x + 5;
};
function f(thunk){
return thunk() * 2;
}
編譯器的"傳名調(diào)用"實現(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í)行器。內(nèi)部的 next 函數(shù)就是 Thunk 的回調(diào)函數(shù)。 next 函數(shù)先將指針移到 Generator 函數(shù)的下一步(gen.next 方法),然后判斷 Generator 函數(shù)是否結(jié)束(result.done 屬性),如果沒結(jié)束,就將 next 函數(shù)再傳入 Thunk 函數(shù)(result.value 屬性),否則就直接退出