前端面试准备,刷题备忘

本文介绍了JavaScript中的防抖和节流函数在处理频繁事件触发的应用场景,提供了实现代码,并对比了Set、Map、WeakSet和WeakMap这四种数据结构的特点和用途,强调了弱引用在内存管理中的作用。
摘要由CSDN通过智能技术生成

1,防抖节流函数

        1,什么是防抖和节流函数?

        防抖:调用函数后,事件执行会有一段时间的间隔才可以再次调用事件,

                简单来说就是在固定的时间内调用事件,每隔N秒调用一次,

        节流:在固定时间内调用事件不限次数,但是只执行一次,

                简: 固定时间内事件执行一次,(N秒内调用一次事件)

        2,防抖和节流的应用场景,

                按钮多次触发接口调用,可以使用防抖函数进行限制,

                类似瀑布流,和过多数据表格进行展示时,可以使用节流函数优化使用体验

        3,常见的防抖函数和节流函数使用

//防抖函数 --- 定时器---
function debounce(func,wait) {
    let timer=null;
    return function() {
    //保存当前调用的dom对象
     let that=this;
     //保存事件对象
     let args=arguments;
     clearTimeout(timer)
     timer=setTimeout(function() {
         func.apply(that,args)
     },wait)
    }
}
//节流函数 ---时间戳--
function throttle(func,wait) {
    //定义初始时间
    let oldTime=0;

    return function() {
        let _this=this;
        let args=arguments;

        //当前时间戳
        let newTime=+new Date();

        //判断用当前时间减去旧的时间,如果大于wait指定的时间就会触发
        if(newTime-oldTime>wait) {
            //执行触发的函数
            func.apply(_this,args)
            //将旧时间更新
            oldTime=newTime;
        }

    }
}
//节流 ---定时器---
function throttle(func,wait) {
    let timer=null;

    return function() {
        let _this=this;
        let args=arguments;
       if(!timer) {
            timer=setTimeout(function() {
                timer=null;
                func.apply(_this,args)
            },wait)
       }
    }
}

二,**Set、Map、WeakSet和WeakMap的区别**

1. **Set**

Set是ES6提供的一种新的数据结构,它类似于数组,但成员的值都是唯一的,没有重复的值。Set本身是一个构造函数,用来生成Set数据结构。它有以下常用方法:


    * `size()`:返回Set结构的成员总数。
    * `add(value)`:添加某个值,返回Set结构本身。
    * `delete(value)`:删除某个值,返回一个布尔值,表示删除是否成功。
    * `has(value)`:返回一个布尔值,表示该值是否为Set的成员。
    * `clear()`:清除所有成员,没有返回值。


2. **Map**

Map也是一种键值对的数据结构,但它与Object最大的区别是键的类型不限制为字符串,可以是任意类型(包括函数、对象或基本类型)。Map的键名是唯一的,不会覆盖。Map有以下常用方法:


    * `size`:返回Map对象的键/值对的数量。
    * `set(key, value)`:设置键的值,并返回这个Map对象。如果键已经存在则更新该键对应的值。
    * `get(key)`:返回键对应的值,如果键不存在则返回undefined。
    * `has(key)`:返回一个布尔值,表示Map对象中是否含有指定的键。
    * `delete(key)`:删除Map对象中的某个键,并返回一个布尔值表示是否删除成功。
    * `clear()`:清除Map对象中的所有键值对。


3. **WeakSet**

WeakSet是ES6提供的一种新的数据结构,表示对象的弱集合。WeakSet的成员只能是对象,而不能是其他类型的值。WeakSet中的对象都是弱引用,即如果没有其他的引用指向该对象,那么该对象会被垃圾回收机制回收,同时它也会自动从WeakSet中删除。因此,WeakSet不可枚举。


4. **WeakMap**

WeakMap也是ES6提供的一种新的数据结构,表示键值对的弱映射。WeakMap的键必须是对象,而值可以是任意类型。与Map不同的是,WeakMap的键是弱引用,即如果键不再被引用,那么该键值对就会被自动删除。WeakMap也是不可枚举的。

**总结**

* Set和Map的主要区别在于,Set的成员是唯一的,而Map的成员是键值对。
* WeakSet和WeakMap都是弱引用的数据结构,它们的键都是对象,并且当键不再被引用时,对应的键值对会被自动删除。这是为了防止内存泄漏,因为普通的Set和Map会强引用它们的键,即使这些键在其他地方不再被使用。
* WeakMap的键是弱引用,因此它的size属性无法访问,也无法使用forEach()和clear()等方法。这是因为如果尝试枚举或清除WeakMap,可能会破坏其弱引用的特性。

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值