1、关于 var、let、const 三者的区别
- var 存在变量提升的问题,就是即使使用 var 先使用后定义变量也不会报错,但是 let 就不行,必须先定义后使用;
- var 存在变量覆盖的问题,即var 可以对同一个变量名进行多次赋值,而 let 不行,在同一作用于下对同一变量名只能定义一次;
- var 没有块级作用域,而 let 存在块级作用域;
- const 与 let 相比,const 定义的变量不可以进行修改,let 定义的变量可以进行修改;
- const 定义 变量后,必须进行赋值,否则会报错。
2、在不引用的三个变量的情况下,交换两个变量值
let a = 1;
let b = 2;
// 第一种方法
[a,b] = [b,a];
console.log(a,b) // 2 1
let a = 1;
let b = 2;
// 第二种方法通过运算
a++
b--
console.log(a, b) // 2 1
3、数组快速去重
// 对下面数组进行去重
let arr = [1,3,4,5,3]
let newArr = [... new Set(arr)]
4、关于Promise 构造函数执行的顺序
// 构造函数同步执行
const promise = new Promise((resolve,reject)=>{
console.log(1)
resolve()
console.log(2)
})
// then 是异步执行
promise.then(
()=>{
console.log(3)
}
)
console.log(4) // 1 2 4 3
5、什么是闭包
- 闭包就是方法里面返回一个方法;
function a(){
var a1 = 1
let a2 = 1
return function(){
return a1
}
}
6、闭包存在的意义
- 延长变量的声明周期,通常情况下函数内部的变量,当函数执行完毕后就会被回收,而通过闭包可以是变量不被收回
- 创建私有环境变量
7、防抖与节流
- 防抖:防抖就是把多次操作变成一次操作,常用于即时查询
// 防抖
function debounce(fun,wait){
let timer = null;
return ()=>{
if(timer) clearTimeOut(timer)
setTimeOut(func,wait)
}
}
- 节流:节流就是把多次操作变成,少操作,常用于表单提交。
// 节流
function throttle(fun,wait){
let timer = null;
return ()=>{
if(!timer){
timer = setTimeOut(()=>{
fun()
timer = null
},wait)
}
}
}