备赛蓝桥杯之第十六届模拟赛2期职业院校组第五题:文本自动生成器
提示:本篇文章仅仅是作者自己目前在备赛蓝桥杯中,自己学习与刷题的学习笔记,写的不好,欢迎大家批评与建议
由于个别题目代码量与题目量偏大,请大家自己去蓝桥杯官网【连接高校和企业 - 蓝桥云课】去寻找原题,在这里只提供部分原题代码
本题目为:备赛蓝桥杯之第十六届模拟赛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 = -1
function 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)
}
}
感谢观看此篇文章,谢谢大家的支持,本片文章只是我自己学习的历程,有些写的不好地方欢迎大家交流改动。
长路漫漫,我们还需努力!