高阶函数_函数柯里化

高阶函数_函数柯里化


一、高阶函数的定义?

如果一个函数符合下面2个规范中的任何一个,那该函数是高阶函数
1)若A函数,接受的参数是一个函数,那么A就可以称为高阶函数
2)若A函数,调用的返回值依然是一个函数,那么A就可以称之为高阶函数
常见的高阶函数有Promise,setTimeout,arr.map()等等

二、高阶函数实现?

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
<div id="test"></div>
<!--引入依赖库-->
<script src="../js/react.development.js"></script>
<script src="../js/react-dom.development.js"></script>
<script src="../js/babel.min.js"></script>
<script type="text/babel">
    //1、定义组件
    class Login extends React.Component{
        //初始化转态
        state={
            username:"",
            password:""
        }
        //表单提交
        handleSubmit=(event)=>
        {
            event.preventDefault();//可以阻止action调转和无action时候的刷新动作
            const {username,password}=this.state;
            alert(`用户名是${username},密码是${password}`);
        }

        //高阶函数
        submitFrom=(dataType)=>
        {
       		 //放回函数
            return (event)=>
            {
                this.setState({[dataType]:event.target.value});
            }
        }
        render()
        {
            return (
                    <form  action="https://www.baidu.com" onSubmit={this.handleSubmit}>
                        用户名:<input onChange={this.submitFrom("username")} type="text" name="username"/>
                        密码:<input onChange={this.submitFrom("password")} type="password" name="password"/>
                        <button >确定</button>
                    </form>
            )
        }

    }
    ReactDOM.render(<Login/>,document.getElementById("test"));
</script>
</body>
</html>

注意键值对key:value的形式中{dataType:value}里面的dataType会默认写成{“dataType”:value},如果我们是想找到dataType里面的值来作为key那么我们就要通过[]的方式{[dataType]:value}
在这里插入图片描述

三、函数的科里化定义

通过函数调用继续返回函数的方式,实现多次接受参数最后统一处理的函数编码形式
在这里插入图片描述
那么有什么必要呢?像下面这种情况,就不可能传多个参数,所以要用到函数科里化
在这里插入图片描述

四、不用科里化的写法

方法一:

在这里插入图片描述

方法二:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值