提示:本篇文章仅仅是作者自己目前在备赛蓝桥杯中,自己学习与刷题的学习笔记,写的不好,欢迎大家批评与建议
由于个别题目代码量与题目量偏大,请大家自己去蓝桥杯官网【连接高校和企业 - 蓝桥云课】去寻找原题,在这里只提供部分原题代码
本题目为:备赛蓝桥杯之第十六届模拟赛2期职业院校组第五题:文本自动生成器
题目:
经过运行环境运行之后的效果如下:
本题需要做的代码如下:
/*** 组合多个中间件函数,形成一个新的中间件函数。* @param {...Function} middlewares - 要组合的中间件函数。* @return {Function} - 组合后的中间件函数。*/
function compose(...middlewares) {// TODO : 待补充代码
}
本题目标如下:
完善
js/compose.js
中compose
函数的 TODO 部分,完成以下目标:
compose
函数接收多个中间件函数作为参数,每个函数中必须调用next(arg)
将函数的执行值传递到下一个参数。所有中间件函数接受两个参数:
initialValue
和callback
。initialValue
是将通过中间件函数传递的初始值,而callback
是在所有中间件函数执行完毕后将被调用并传入最终值的函数。
compose
函数的执行逻辑如下:它按照传入的顺序执行中间件函数,对每个中间件函数传递当前值。如果中间件函数返回一个值,则通过next(arg)
的像是将其传递给下一个中间件函数。
compose
函数返回一个新的中间件函数,可以用于按顺序执行合并后的中间件函数。
compose
执行示例如下:function add(str, next) {str+='2'next(str); } function add2(str, next) {str+='3'next(str); } const processdemo = compose(add,add2); //传入的函数会按照顺序执行 processdemo("1", (finalValue) => {console.log(finalValue) // 123 }); const processdemo2 = compose(add2,add); processdemo2("1", (finalValue) => {console.log(finalValue) // 132 });
说人话:
我们要做的是,定义一个能把所有中间件的方法链式执行下来的compose方法
本题作者想说
答案:
/*** 组合多个中间件函数,形成一个新的中间件函数。* @param {...Function} middlewares - 要组合的中间件函数。* @return {Function} - 组合后的中间件函数。*/
function compose(...middlewares) {// TODO : 待补充代码 return function (initialValue, callback) {let index = -1function next(item) {index++let handlefunction = middlewares[index]if (!handlefunction) {return callback(item)}handlefunction(item, next)}next(initialValue)}
}
作者自我解释版:
function compose(...middlewares) {// TODO : 待补充代码 // 我们要做的是,定义一个能把所有中间件的方法链式执行下来的compose方法// 因为我们定义的是一个执行方法,所以返回一个函数// 该函数只接收两个参数initialValue 和 callback,initialValue 是初始值,callback 是执行完毕返回。return function (initialValue, callback) {// 首先我们要定义一个数值,用于执行对应的数量函数// 函数是从0开始的,当我们执行整个函数时,就要调用第一个函数,因此将index定义为-1,以便当index++时,执行第0个函数let index = -1// 强调一遍,基本的方法都已经做好了,我们主要做的做链式执行的next函数,以便顺序顺利执行// 定义一个next方法,传入一个初始值function next(item) {// index++开始执行index++// 定义一个正在执行的方法,相比于middlewares不同的是,handlefunction已经排好了序let handlefunction = middlewares[index]// 当所有函数都已经被调用后,即handlefunction为假,整个条件为真,则执行回调函数if (!handlefunction) {// 返回callback函数return callback(item)}// 除此之外,不仅定义了handlefunction函数还要使用这个函数// 将item传入进去,并且再次执行next函数,以达到顺序循环执行handlefunction(item, next)}// 初始值注入next(initialValue)}
}
感谢观看此篇文章,谢谢大家的支持,本片文章只是我自己学习的历程,有些写的不好地方欢迎大家交流改动。
长路漫漫,我们还需努力!