JS面试题一

本文深入探讨JavaScript中的var、let、const的区别,包括变量提升、作用域和赋值规则。同时,介绍了两种交换变量值的方法,并讲解了如何利用Set实现数组快速去重。接着,我们讨论了Promise构造函数的执行顺序,理解异步编程的关键。最后,阐述了闭包的概念及其在延长变量生命周期和创建私有变量方面的重要性,以及防抖和节流函数的实现和应用场景。
摘要由CSDN通过智能技术生成

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)
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值