高阶函数_函数柯里化
一、高阶函数的定义?
如果一个函数符合下面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}
三、函数的科里化定义
通过函数调用继续返回函数的方式,实现多次接受参数最后统一处理的函数编码形式
那么有什么必要呢?像下面这种情况,就不可能传多个参数,所以要用到函数科里化