一。js闭包
1.闭包什么?
简单来说就是方法里返回一个方法
闭包会常驻内容 =>慎用闭包
1.1全局变量:因为这个是全局变量,保存在全局作用域属性Script里面。会污染其他局部变量,不会被垃圾回收机制回收。代码执行完之后依然在。
1.2局部变量:因为这个是局部变量,保存在全局作用域属性Local(喽氪儿)里面。
js执行机制:会生存临时的变量对象AO OA存储所有方法和局部变量,全局不在,方法执行完后,局部变量回事,访问不到局部变量。
1.3 作用域:就近原则
1.4 延长变量的生命周期
2.闭包存在的意义?
保证了每个函数(组件)都有私有作用域,也就是私有环境,能保存各自的独立性。面向对象编程--数据的隐藏和封装。
二、JS防抖与节流。
1.1防抖==>固定事件内,事件只允许发生一次。
函数防抖
输入完2秒钟之后才发起请求
//防抖
let telInput = document.querySelector('input');
telInput.addEventListener('input', antiShake(demo,2000));
//防抖封装 fn方法 wait等待时间
function antiShake(fn,wait){
//定时器 初始状态是null
let timeOut = null;
return args => {
//如果有先销毁掉这个操作
if(timeOut) clearTimeout(timeOut)
//如果没有 创建一个定时器
timeOut = setTimeout(fn, wait);
}
}
function demo(){
console.log('发起请求');
}
2.1节流 => 一定时间内的多个事件合为一个
1.1应用场景 => 1.提交表单 2.高频监听事件。
let box = document.querySelector(".box");
box.addEventListener("touchmove", throttle(demo,2000));
//封装节流函数
function throttle(event, time){
//定时器 默认状态空
let timer = null;
return function(){
//如果没有定时器 做一个定时器 event执行方法 time执行时间
if(!timer){
timer = setTimeout(()=>{
event();
//制空
timer = null;
},time);
}
}
}
function demo(){
console.log('发送请求');
}
三、null和undefined的区别
1.1 null 表示为“无”是一个对象 0 打印为obj
null几种情况:手动释放内存 let obj{} obj = null;
作为函数的参数(此参数不是对象)
原型链的顶端
1.2 undefined表示“无”的原始值 打印为NaN
undefined几种情况:已经声明未赋值 默认声明
对象某个属性不存在
函数调用少参数
函数的返回值默认值
四.ES6 --filter
let a = [1,2,3,32,13];
// current => 当前值, index => 当前值的下标, array 这个数组的对象
let b = a.filter((current, index, array) => {
returan current <10
})
console.log(a);
//小于10的 返回一个数组
console.log(b);
五.foreach与map的区别
1.1 foreach :没有返回值
不能使用break打断
遍历的是value值
不能用于对数组进行修改 ,因为没有返回值
let arr = ['a','b','c'];
let res = arr.forEach(element => {
console.log(element);
return elemnt + '1';
})
console.log(res);
1.2 map:有返回值(数据)默认return是undefined
接受的参数是一个函数(key, value)
不能用break打断
let arr = ['a','b','c'];
let res = arr.map((value, key) => {
return elemnt + '1';
})
console.log(res);
六.js递归求和1-100
//1 + 2 + 3
function add(num1,num2){
let num = num1+ num2
if(num2 +1 >100){
return num;
}else{
return add(num,num2 + 1)
}
}
let sum = add(1,2);
console.log(sum);