js函数柯里化的概念和运用

函数轲里化

// 返回一个函数形成闭包query不会被销毁
function scoreQuery(query) {
	return (score) => {
		if (score >= query) return true;
		else false;
	}
}

// 函数轲里化通过给原函数传递不同的参数接收返回的函数来使用
let score60 = scoreQuery(60);
let score80 = scoreQuery(80);
let score1 = 70;
let score2 = 70;

if (score60(score1)) {
	console.log(score1, "成绩合格")
} else {
	console.log(score1, "成绩不合格")
}

if (score80(score2)) {
	console.log(score2,"成绩合格")
} else {
	console.log(score2,"成绩不合格")
}
// 运行结果:
// 70 成绩合格
// 70 成绩不合格

函数轲里化的运用

例如你要做一个消息列表的删除功能还需要一个删除提示,怎么能优雅的点击删除之后获取相关参数,唤起提示modal并在点击删除之后执行删除。

在点击事件的时候把参数传递并用一个变量来接收返回的函数。deleteReq需要定义在最外层。

<TouchableWithoutFeedback
  styles={{backgroundColor: 'red', width: 20, height: 20}}
	onPress={() => (deleteReq = deleteForum(item?.id, index))}>
	<Image
		source={require('../image/delete.png')}
		style={styles.icon}></Image>
</TouchableWithoutFeedback>

返回一个函数形成闭包使里面值能够保持

const deleteForum = (id, index) => {
    setVisibleDelete(true);
    return () =>
      fetchRequest(`/v1/forumThread/id/${id}`, 'DELETE', '', navigation).then(
        res => {
          if (res.code == '0000') {
            dataList.splice(index, 1);
            setDataList([...dataList]);
          }
        },
      );
  };

在点击确定删除的时候执行返回的函数实现删除

<Modal
	title="是否删除当前帖子?"
	transparent
	onClose={() => setVisibleDelete(false)}
	maskClosable
	visible={visibleDelete}
	footer={[
	{text: '取消'},
	{text: '删除', onPress: () => deleteReq()},
	]}></Modal>
posted @ 2022-06-24 10:13  大海&  阅读(79)  评论(0编辑  收藏  举报