变量与常量区别
- 变量用var(弃用)、let声明;常量用const声明
- 变量可以声明后再初始化,常量声明时必须出始化
- 变量与常量都不能重复申明(var声明的除外);变量的傎可以更新,常量的值不能被更新
//声明一个变量
let userName;
userName = "誓言";
//声明一个常量
const USERNAME = "誓言";
//更新一个变量
userName = "八戒";
//更新一个常量就会报错
USERNAME = "常量初始化后就不能被更新了";
函数与匿名函数的区别
- 函数有函数名,匿名函数没有,需要赋值给一个变量调用
- 匿名函数可以简化为箭头函数,而普通函数不行
//声明一个函数
funtion fun(){
return console.log('我是一个函数');
}
//调用函数
fun();
//声明一个匿名函数
let fun1 = funtion(){
return console.log('我是一个匿名函数');
}
//调用匿名函数
fun1();
//简化为箭头函数
fun1 = () => console.log('我是一个匿名函数');
箭头函数的参数特征
- 箭头函数参数不同写法也不同
1.没有参数时,只写一个小括号
fun1 = () => console.log('我是一个匿名函数');
2.一个参数时,不用写小括号
fun2 = a => console.log(a);
3.几个参数肯定要写小括号了,如果只有一条语句可以省略return 和 {}
let fun1 = funtion(name){
return console.log('我是一个' + name );
}
//可简化为
fun1= name => console.log('我是一个' + name );
闭包原理与实现
- 能访问自由自由变量的的函数,所以理论上讲,任何函数都是闭包
- 自由变量:即不是函数参数变量 ,也不是私有变量,它存在于函数调用上下文中
function a(){
let n = 100;
//相对于子函数来说,n就是自由变量
return function(){
return n;
}
}
//返回的子函数就是闭包
//此时用闭包实现了访问私有变量
console.log(a()());
高阶函数
- 什么是高阶函数:使用函数为参数或者将函数作为返回值
1. 回调函数
- 将函数作为参数
- 理解:回调函数就是一个被作为参数传递的函数
2. 偏函数
- 先把函数调用中的个别参数先固定下来,剩下的参数交给子函数来处理
- 简化声明
3. 偏函数偏激版柯里化
- 简化调用参数
4. 纯函数
- 完全独立与调用上下文,返回值只能受到传入的参数影响
- 理解:不依赖上下代码的声明的一切,他返回的值只有调用时传入的参数能影响,比如函数中引用了全局变量,全局变量的的更新会影响函数,那么这个函数就不是一个纯函数
code
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
</head>
<body>
<script>
function a() {
let n = 100;
return function () {
return n;
};
}
console.log(a()());
//回调函数
document.addEventListener("click", function () {
alert("参数中使用了函数");
});
//偏函数
function sum(x, y) {
return function (z, e) {
return x + y + z + e;
};
}
let fn1 = sum(2, 3);
console.log(fn1(4, 5));
//偏函数偏激版
function sum1(n) {
return function (m) {
return function (o) {
return n + m + o;
};
};
}
//纯函数
let sumVlue = sum1(1)(3)(5);
console.log(sumVlue);
let add = (p, q) => console.log(p + q);
add(3, 5);
</script>
</body>
</html>