JavaScript 是一门基于原型(Prototype)的弱类型脚本语言,掌握好”高级”部分才能真正理解它的运行机制。本文整理了 JS 进阶阶段最常遇到的几个核心知识点。
作用域与闭包
作用域
作用域决定了变量与函数的可访问范围。JS 中存在三种作用域:
- 全局作用域:在代码任何位置都能访问。
- 函数作用域:在函数内部声明的变量,只能在函数内部访问。
- 块级作用域:由
let/const在{}中创建,var没有块级作用域。
1 | var a = 1; // 全局 |
闭包
闭包是指有权访问另一个函数作用域中变量的函数。它的核心作用有两个:
- 让函数外的代码可以访问函数内部的变量
- 让变量始终保存在内存中,不会随函数执行完毕被回收
1 | function createCounter() { |
注意:滥用闭包会导致内存占用过大,用完应手动置空引用。
this 指向
this 的指向在调用时才确定,与声明位置无关。常见场景:
| 调用方式 | this 指向 |
|---|---|
| 普通函数调用 | window(严格模式下为 undefined) |
| 对象方法调用 | 该对象 |
| 构造函数调用 | 实例对象 |
call / apply / bind |
手动指定的对象 |
| 箭头函数 | 定义时外层作用域的 this |
1 | const obj = { |
原型与原型链
每个函数都有 prototype 属性,实例对象通过 __proto__ 指向构造函数的原型。当访问一个属性时,会沿着 __proto__ 逐级向上查找,直到找到或到达 null,这条查找链路就是原型链。
1 | function Person(name) { |
ES6 的 class 本质就是基于原型的语法糖,extends 实现的是原型链上的继承。
异步编程
回调函数 → Promise → async/await
1 | // 传统回调 |
Promise.all / Promise.race
1 | // 全部成功才返回 |
其他常用高级特性
- 深拷贝:
JSON.parse(JSON.stringify(obj))或structuredClone(obj),注意前者会丢失函数与undefined - 防抖 / 节流:控制高频事件(滚动、输入、resize)的触发频率
- 事件循环(Event Loop):同步任务先执行,微任务(Promise)先于宏任务(setTimeout)执行
1 | // 防抖:停止触发 n 秒后执行 |
以上就是 JS 进阶阶段最核心的几个知识点,理解它们对后续学习框架(Vue / React)和阅读源码都会有很大帮助。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 JCAlways!
评论





