05-JS函数相关知识点

32 阅读2分钟

闭包

  • 闭包就是能够读取其他函数内部变量的函数
  • 闭包是指有权访问另一个函数作用域中变量的函数,创建闭包的最常见的方式就是在一个函数内创建另一个函数,通过另一个函数访问这个函数的局部变量,利用闭包可以突破作用链域
  • 闭包的特性:
    • 函数内再嵌套函数
    • 内部函数可以引用外层的参数和变量
    • 参数和变量不会被垃圾回收机制回收
  • 好处:能够实现封装和缓存等;
  • 坏处:就是消耗内存、不正当使用会造成内存溢出的问题

防抖

事件触发后,等待一段时间(delay),如果在这段时间内再次触发事件,则重新计时。应用场景:表单输入校验、按钮防重复点击、搜索框输入。

image.png

  • 分析:arguments 是 JavaScript 函数内的一个类数组对象,包含调用该函数时传入的所有参数。用于捕获防抖函数调用时传递的参数,并将它们传递给原始的目标函数 fn。fn.apply(this, args)fn 是目标函数,即防抖封装的函数。apply 是 JavaScript 中用于调用函数的方法之一,允许动态指定函数执行时的上下文(this)和参数。apply 的第一个参数是要绑定的上下文(这里是 this),第二个参数是参数数组。timer 是闭包变量,用于在多次调用之间共享状态(即存储定时器)
  • 具体流程
    • 第一次触发,启动定时器。
    • 如果在 delay 时间内再次触发,清除之前的定时器,重新计时。
    • 当触发停止超过 delay 时间时,执行函数。

节流

事件触发后,在一定时间间隔内(delay),只允许执行一次,无论事件触发了多少次。应用场景:滚动事件、窗口调整事件。

image.png

  • 节流 (throttle) 流程
    • 第一次触发,立即启动定时器并执行函数。只要在delay范围内,只执行一次并清空time
    • delay 时间内,如果再次触发,直接忽略。
    • 定时器完成后,允许下一次触发。