前言
很多人在框架上侃侃而谈,却栽在最基础的 JavaScript、浏览器和网络知识上。基础不牢,框架学得再多也只是”空中楼阁”。本文把前端最应打牢的基础知识展开讲透,并附上自查清单。
一、JavaScript 核心(重中之重)
1. 作用域与闭包
- 作用域:全局作用域、函数作用域、块级作用域(
let/const引入) - 作用域链:变量查找沿”内层 → 外层”逐级向上,直到全局
- 闭包:函数能记住并访问其定义时所在词法作用域,即使函数在其作用域外执行
- 典型应用:封装私有变量、防抖节流、函数柯里化、模块化
- 常见坑:循环中
var变量捕获、闭包导致内存泄漏
1 | // 经典闭包题 |
2. this 指向
this 的指向在调用时确定,而非定义时:
| 调用方式 | this 指向 |
|---|---|
| 普通函数调用 | undefined(严格模式)/ window(非严格) |
| 对象方法调用 | 该对象 |
new 构造调用 |
新创建的实例 |
call / apply / bind |
显式指定的对象 |
| 箭头函数 | 定义时外层作用域的 this(无自己的 this) |
3. 原型与原型链
- 每个函数都有
prototype,每个对象都有__proto__(指向构造函数的prototype) - 原型链:访问属性时沿
__proto__逐级向上查找,直到Object.prototype→null - 继承方式:原型链继承、构造函数继承、组合继承、
class语法糖(本质仍是原型) - 高频题:
instanceof原理、new的过程、手写Object.create
4. 事件循环(Event Loop)
- 同步任务 → 微任务 → 宏任务的执行顺序是必考点
- 微任务:
Promise.then/catch/finally、async/await、queueMicrotask、MutationObserver - 宏任务:
setTimeout、setInterval、setImmediate(Node)、I/O、MessageChannel - 每次宏任务执行完,会清空所有微任务,再进入下一个宏任务
1 | console.log('1'); |
5. 异步编程与 Promise
- Promise 状态:pending → fulfilled / rejected,不可逆
- 手写 Promise、
Promise.all/allSettled/race/any的区别 - async/await:是 Generator + Promise 的语法糖,需理解其错误处理与并发控制
- 高频手写:Promise 链式调用、并发限制、超时控制
6. 深浅拷贝
- 浅拷贝:
Object.assign、展开运算符...、Array.slice/concat - 深拷贝:
JSON.parse(JSON.stringify())(有局限,无法处理函数/undefined/循环引用/Date/RegExp) - 手写深拷贝需处理:循环引用(
WeakMap)、特殊对象类型
二、浏览器基础
1. 渲染流程
HTML 解析 → DOM 树 + CSSOM 树 → 渲染树 → 布局(Layout)→ 绘制(Paint)→ 合成(Composite)
- 重排(Reflow):改变几何属性(宽高、位置)会触发重排,代价高
- 重绘(Repaint):仅样式外观变化,如颜色,代价较低
- 优化:批量改样式、用
transform/opacity(走合成线程)、读写分离
2. 本地存储
| 存储 | 容量 | 生命周期 | 特点 |
|---|---|---|---|
| Cookie | 约 4KB | 可设置过期时间 | 随请求自动携带,常用于鉴权 |
| localStorage | 约 5MB | 永久 | 同源共享,不自动过期 |
| sessionStorage | 约 5MB | 会话结束清除 | 仅当前标签页 |
| IndexedDB | 较大 | 永久 | 异步、支持事务,适合大量结构化数据 |
3. 跨域与安全
- 同源策略:协议、域名、端口三者一致才算同源
- 跨域方案:CORS、JSONP(仅 GET)、
postMessage、WebSocket、代理(开发环境) - 安全:XSS(注入脚本)、CSRF(跨站请求伪造)的原理与防御
三、网络基础
1. HTTP 协议
- 常见方法:GET / POST / PUT / DELETE / PATCH / OPTIONS 语义与区别
- 状态码:2xx 成功、3xx 重定向、4xx 客户端错误、5xx 服务端错误(重点记 301/302/304/401/403/404/500)
- HTTP/1.1 vs HTTP/2:多路复用、头部压缩、服务器推送
- HTTPS:TLS 握手、对称/非对称加密、证书机制
2. 浏览器缓存
- 强缓存:
Cache-Control(max-age、no-cache、no-store)、Expires - 协商缓存:
ETag/If-None-Match、Last-Modified/If-Modified-Since - 完整流程:强缓存命中直接用,未命中走协商,再未命中重新请求
3. 从输入 URL 到页面展示
这条”经典串讲”能串联起 DNS 解析、TCP 三次握手、TLS 握手、HTTP 请求、缓存、渲染全流程,务必能完整讲清。
四、CSS 基础
- 盒模型:
content-boxvsborder-box区别与使用场景 - 选择器优先级:内联 > id > class/属性/伪类 > 元素/伪元素,
!important的例外 - 定位:
relative/absolute/fixed/sticky的参照物与差异 - BFC:块级格式化上下文,解决外边距塌陷、浮动塌陷等问题
- Flex / Grid:现代布局核心,
flex: 1的含义(flex-grow/shrink/basis) - 居中方案:水平垂直居中的多种实现(flex、grid、绝对定位 + transform)
五、算法与数据结构(中高级加分)
- 高频:数组去重、扁平化、排序(快排/归并)、二分查找、两数之和
- 数据结构:栈、队列、链表、树(二叉树遍历)、哈希表
- 技巧:双指针、滑动窗口、递归回溯
- 不必刷到竞赛级别,但手写中等难度要熟练
六、自查清单
按下面逐条自测,答不上来的就是你的薄弱点:
- 能讲清闭包的形成、应用与陷阱
- 能准确说出任意场景下
this的指向 - 能手写
new、instanceof、深拷贝、防抖节流 - 能准确说出
Promise与async/await的执行顺序 - 能讲清事件循环的宏任务与微任务
- 能说清浏览器从输入 URL 到渲染的完整流程
- 能区分强缓存与协商缓存,并说明如何配置
- 能讲清 CORS、XSS、CSRF 的原理与防御
- 能讲清 Flex 布局的常用属性与
flex: 1含义 - 能手写一道中等难度的算法题
总结
前端基础知识就那么多,JavaScript 核心(作用域/this/原型/事件循环/异步)+ 浏览器渲染 + 网络与缓存是最关键的三大块。把这几块吃透,再叠加框架和工程化,面试时才能从容应对、以不变应万变。
内容由 AI 生成,仅供参考。本文发布于 码上学习,转载请注明出处。