一、作用域与变量提升
1. var / let / const 区别
- var:函数级作用域,存在变量提升,可重复声明;
- let、const:块级作用域,暂时性死区,不可重复声明;
- const 声明基础类型不可修改,引用类型仅锁住地址。
// 暂时性死区示例 console.log(a); let a = 10;
2. 闭包
内层函数保留外层函数作用域变量,外层执行完毕变量不会被销毁;常用于数据私有化、防抖节流封装。
二、异步核心:Promise
- 三种状态:pending、fulfilled、rejected,状态一旦锁定无法更改;
- 链式调用 .then()、.catch()、.finally(),解决回调地狱;
- 配合 async/await 同步化书写异步代码。
async function getData(){
try{
const res = await fetch('api地址');
return res.json();
}catch(err){
console.error('请求失败',err);
}
}
三、事件循环机制
JS单线程执行,同步代码优先执行,异步任务分为宏任务、微任务;每一轮执行顺序:同步代码 → 所有微任务 → 单个宏任务。
- 微任务:Promise.then、MutationObserver、queueMicrotask;
- 宏任务:setTimeout、setInterval、DOM渲染、I/O操作。
四、原型与原型链
每个对象都有__proto__指向构造函数prototype;实例顺着__proto__向上查找属性形成原型链,顶层为null。
总结
JS学习前期绝大多数疑难问题都出自作用域、异步执行顺序、原型体系,吃透这三块基础后进阶学习框架会轻松很多。