1. 变量与常量的区别
1.变量
<script>
// 1.1 声明和初始化可以分开操作
let userName;
console.log(userName);
// 1.2声明时初始化并赋值
let itemName = '手机';
console.log(itemName);
// 1.3更新
userName = '陈大哥';
console.log(userName);
</script>
2.常量
// 尽可能使用大写 const APP='商城';
// 不能更新,也不能删除
// 声明时必须初始化
<script>
const PRICE = 3980;
console.log(PRICE);
</script>
2. 函数与匿名函数的区别
2.1 函数不管写到什么地方,总会跑到前面.会自动提升到顶部
2.2 函数的值可以被重写.
2.3匿名函数就可以很好的解决普通函数的提升问题,然后使用常量方法可以有效的解决函数被重写.
3. 箭头函数的参数特征
let niming = function(a, b) {
return a + b;
}
console.log(niming(2, 4))
// 匿名函数才能使用箭头函数
niming = (a, b) => {
return a + b;
}
console.log(niming(12, 4))
// 如果函数体只有一条语句,可不写return,花括号也不用了
niming = (a, b) => a + b;
console.log(niming(4, 4))
// 如果只有一个参数连小括号都不用要了
niming = canshu => console.log("调用成功");
niming();
// 如果没有参数小括号必须有
niming = () => console.log("Success");
niming();
// 1.箭头函数没有原型属性prototype,不能当构造函数用
// 2. 箭头函数中的this始终与它的上下文绑定的
</script>
4. 闭包原理
// 自由变量: 即不是函数参数变量也不是私有变量,存在于函数调用上下文中
// 闭包: 能够访问自由变量的函数,所以理论上讲,任何函数都是闭包
<script>
let num = 100;
function add(a, b) {
// a,b: 参数变量
// t: 私有变量
let t = 0;
// num: 自由变量
return t + a + b + num;
}
function a() {
let n = 100;
// 这个返回的子函数就是闭包
return function () {
return n;
};
}
// console.log(n);
console.log(a()());
function f1() {
let a = 1;
// a 相对于f1是私有变量,但是相对于返回的匿名函数就是一个自由变量
return function () {
return a++;
};
}
let f2 = f1();
console.log(f2());
console.log(f2());
console.log(f2());
</script>
5. 四种高阶函数,全部实例演示,并理解回调和纯函数是什么,写出你的答案
<script>
// 高阶函数: 使用函数为参数或者将函数做为返回值的函数
// 1. 回调函数
document.addEventListener("click", function () {
alert("Hello World~~");
});
// 2. 偏函数: 简化了声明时的参数声明
let sum = function (a, b) {
return function (c, d) {
return a + b + c + d;
};
};
let f1 = sum(1, 2);
console.log(f1(3, 4));
// 3.柯里化
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);
// 4. 纯函数
// 完全独立于调用上下文,返回值只能受到传入的参数影响
function getDate() {
return Date.now();
}
console.log(getDate());
// 是纯函数
function add(a, b) {
console.log(a + b);
}
add(1, 2);
</script>