防抖和节流有什么区别?
从搜索联想和滚动采样理解防抖与节流,给出保留 this、参数并支持取消的防抖代码,以及首沿节流实现,说明 leading、trailing、请求竞态和清理边界。
JavaScript · 性能优化面试题第 1 页,显示第 1–7 题,共找到 7 道完整解析,可继续按分类、标签与关键词缩小范围。
按稳定语义路径排序
从搜索联想和滚动采样理解防抖与节流,给出保留 this、参数并支持取消的防抖代码,以及首沿节流实现,说明 leading、trailing、请求竞态和清理边界。
copyWithin 把数组里的一段复制到同一个数组的另一个位置,直接改原数组、长度不变、超出末尾的部分被截掉。这篇讲清参数规则、源和目标重叠时为什么不会被覆盖错、自己写循环会错在哪,以及它真正适用的场景。
flatMap 的回调可以返回零项、一项或多项,所以它能在一次遍历里同时做过滤和映射,也能把一条记录展开成多行。这篇讲清它比 map 加 filter 合适的两类场景、返回 null 过滤不掉的坑,以及它是不是真的更快。
push 和 pop 只动数组末尾,shift 和 unshift 要把后面所有元素的索引挪一遍,所以大数组上头部操作更慢。讲清四个方法的返回值、复杂度,以及用 shift 做队列的问题和游标写法。
数组 includes 要从头逐个比较,Set.has 通常是哈希查找,查询次数多时 Set 更快。但建 Set 本身要遍历一遍,只查一次或每次都重建就不划算。讲清复杂度、什么时候值得建 Set,以及常见的写法错误。
严格模式下访问 arguments.callee 会直接抛 TypeError。本文讲清它原本解决什么问题、为什么被禁用(妨碍引擎内联优化、暴露调用栈),以及用具名函数表达式实现递归的写法和它比外层变量递归更稳的原因。
类字段箭头函数在每次创建实例时单独生成,并捕获该实例的 this,适合交给事件回调而不必额外绑定。原型方法由实例共享,方法被提取后 this 由调用方式决定;内存开销、继承覆盖和函数引用稳定性因此各有取舍。