<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>函数练习</title>
</head>
<body>
<script>
// 函数声明与调用:
// 1.标准声明,不能重申明
function myFunc() {
return "hello!";
}
console.log(myFunc());
// 2.匿名函数
// 套个马甲名字,找到入口
let newFunc = function () {
return "hello again";
};
newFunc = function () {
return "hello again!!";
}; //利用变量的let 和 const关键字可以反复申明为不同值;
console.log(newFunc()); //函数调用时必有括号,不加即它本身;
// 3.匿名函数=>箭头函数
// 箭头函数怎么缩写都少不了箭头=>
newFunc = (a, b) => a + b; // 箭头函数的参数定义可以是0个带括号,1个可带可不带括号,2个及以上带括号,返回语句如果只一行可以省掉花括号;
console.log(newFunc(1, 2));
// 4.函数的参数定义和传入参数可以是数组,也可以是函数
asum = function (...arr) {
//...把数组拆解
console.log(arr);
return arr.reduce(function (p, c) {
return p + c;
});
};
console.log(asum(1, 2, 3, 4));
let params = [15, 20, 35, 40];
console.log(asum(...params)); //...把数组拆解
// 传入参数是个函数
document.addEventListener("click", function () {
alert("Hello World~~");
});
// 5.函数的返回值可以是函数等值类型,哪里调用哪里返回,问题是谁去接住,或者需不需要返回;
// 偏函数: 简化了声明时的参数声明
let sum = function (a, b) {
return function (c, d) {
return a + b + c + d; // c,d是局部变量,a,b既不是全局变量又不能undefined所以就跨调用留存;
};
};
let f1 = sum(1, 2);
console.log(f1(3, 4));
// 柯里化
sum = function (a) {
return function (b) {
return function (c) {
return function (d) {
return a + b + c + d;
};
};
};
};
// 简化了调用参数
let res = sum(10)(20)(30)(40);
console.log(res);
</script>
</body>
</html>