一、作用域与变量提升

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学习前期绝大多数疑难问题都出自作用域、异步执行顺序、原型体系,吃透这三块基础后进阶学习框架会轻松很多。