柯里化的作用:缓存部分性能。
- 柯里化: 一个函数原本有多个参数, 之传入一个参数, 生成一个新函数, 由新函数接收剩下的参数来运行得到结构.
- 偏函数: 一个函数原本有多个参数, 之传入一部分参数, 生成一个新函数, 由新函数接收剩下的参数来运行得到结构.
- 高阶函数: 一个函数参数是一个函数, 该函数对参数这个函数进行加工, 得到一个函数, 这个加工用的函数就是高阶函数.
问题:已知一组标签名 tags=[‘div’,‘p’,‘a’,‘img’,‘ul’,‘li’],判断后续标签名是否属于该组标签。
常规方法(循环):
const tags=['div','p','a','img','ul','li']
function isHTMLTag( tags, tagName ) {
tagName = tagName.toLowerCase();
// indexOf 内部本质还是遍历
if ( tags.indexOf( tagName ) > -1 ) return true;
return false;
}
isHTMLTag( tags, 'div' )
柯里化:
const tags=['div','p','a','img','ul','li']
// 函数柯里化
function makeMap( tags ) {
let mapset= {};
tags.forEach( key => mapset[ key ] = true );
return function ( tagName ) {
return !!mapset[ tagName.toLowerCase() ]
}
}
let isHTMLTag = makeMap( tags ); // 返回的函数
// 此时使用 isHTMLTag 函数内部已经没有循环
isHTMLTag( 'div' )