能力缺口:别让 JS 基础和算法分析脱节
这份资料是“简单粗暴学习数据结构与算法”的 JS 版第二部分。它解决的核心问题非常明确:很多前端或 JS 开发者在刷算法题时,能写出基本的冒泡或快排,却讲不清自己写的排序到底好在哪里、差在哪里。一旦面试官追问时间复杂度、空间复杂度、排序的稳定性,往往只能背结论而推不出过程;同时,用 JS 写面向对象时,对类、继承、闭包这些语言特性的底层机制也是半懂不懂,导致写出的代码要么内存泄漏,要么逻辑耦合。如果你正处于转岗前端、或者备考大厂时发现自己算法题能凑合但理论一问就虚,这正是指向你能力缺口的资料。它适合已经掌握基础 JS 语法、能独立写简单循环和函数的学习者,不建议纯零基础直接看,否则在闭包和继承的上下文会卡壳。
学习顺序与配套练习建议
建议先从排序相关的四块内容看起,也就是时间复杂度、空间复杂度、稳定性与非稳定性这几节。不要单独看,必须配合手写代码练习。具体做法是:看完时间复杂度后,自己用 JS 写一遍冒泡排序和快速排序,然后对照资料里的分析方法,自己手动推演这两段代码在最好和最坏情况下的执行次数。空间复杂度部分,重点对照快排的递归调用栈和原地排序的区别。关于稳定性,练习时不要只背“稳定”或“不稳定”的结论,而是自己写一个包含重复元素的数组,在排序前后打印元素的位置变化,亲眼看一遍谁跳了谁没跳。看完排序后,再回过头看类、继承、闭包这三节。这三节是 JS 的语言内功,建议配合重构练习:拿一段以前写的面条代码,尝试用类的继承去拆分,同时用闭包去封装私有变量。资料不是用来听完就过的,必须边看边敲,缺什么补什么,别假装看懂了。
看完应能独立回答的问题
学完这份资料,你应该能脱离视频独立做出几件具体的事。第一,给定任意一段排序算法代码,你能准确分析出它的时间复杂度是大 O 什么量级,并且能说出推导依据是循环嵌套还是递归树;第二,你能解释清楚空间复杂度在排序里的实际意义,能指出哪些排序是原地排序,哪些需要额外开辟内存。第三,面对“为什么快排不稳定而归并排序稳定”这类追问,你能结合实际数据给出逻辑自洽的解释,而不是干背结论。第四,在 JS 面向对象方面,你得能说清类和构造函数的关系,能手写一个基于原型的继承链,并且能用闭包实现一个不被外部随意修改的计数器。如果在闭包这节看完后,你连垃圾回收机制和闭包内存引用的关系都讲不清,那就说明这块没补到位,回头把代码再敲一遍。查漏补缺的标准就是:关掉视频,这些概念你能对着空屏幕自己讲出来。
课程目录
1 类 (08:16) 2 继承 (09:56) 3 闭包 (11:43) 4 排序的时间复杂度 (05:44) 5 排序的空间复杂度 (05:08) 6 排序的稳定性和非稳定性 (04:29)





