前言
自己遇到的一个面试题,感觉挺有趣的。
实现效果(需求)
完成fun函数
function fun1(ctx, next) {
ctx.index++;
next();
}
function fun2(ctx, next) {
setTimeout(function() {
ctx.index++;
next();
}, 1000);
}
function fun3(ctx, next) {
ctx.index++;
}
function fun() {
}
var obj = {index:0}
fun([fun1,fun2,fun3], obj) //按fun1,fun2,fun3的顺序,遇到next到下一个函数。最后对象的index应该是3
实现代码
function fun1(ctx, next) {
ctx.index++;
console.log(1);
next();
}
function fun2(ctx, next) {
setTimeout(function() {
ctx.index++;
console.log(2);
next();
}, 1000);
}
function fun3(ctx, next) {
ctx.index++;
console.log(3);
}
function fun(funarr, ctx) {
let funIndex =0;
function next() {
funIndex++;
funarr[funIndex] && funarr[funIndex].call(null, ctx, next);
}
funarr[0](ctx, next);
}
var obj = {index:0}
后记
后面有时间研究一下express中间件的实现解析。