闭包(Closure)
闭包是指函数能够访问并记住其词法作用域,即使该函数在其作用域外执行。
🔍 核心特性
- 保留外部函数的变量
- 实现数据封装与私有变量
- 避免内存泄漏(合理使用)
示例代码
function outer() {
let count = 0;
return () => {
count++;
console.log(count);
};
}
const inner = outer();
inner(); // 1
inner(); // 2
原型链(Prototype Chain)
JavaScript 的对象继承机制基于原型链,通过 __proto__
连接。
🔗 关键概念
- 原型对象(Prototype Object)
- 构造函数(Constructor Function)
Object.create()
方法
继承实现
function Animal(name) {
this.name = name;
}
Animal.prototype.speak = function() {
console.log(`${this.name} makes a noise.`);
};
function Dog(name) {
Animal.call(this, name);
}
Dog.prototype = Object.create(Animal.prototype);
Dog.prototype.constructor = Dog;
模块模式(Module Pattern)
通过闭包创建私有变量和函数,实现模块化开发。
📦 应用场景
- 单例模式设计
- 避免全局污染
- 管理复杂状态
经典结构
const Module = (function() {
let privateVar = 'secret';
function privateMethod() {
console.log('Private method called');
}
return {
publicMethod: function() {
privateMethod();
},
publicVar: 'public'
};
})();
异步编程(Asynchronous Programming)
使用 async/await
、Promise
和事件循环处理非阻塞操作。
⚡ 最佳实践
- 避免回调地狱(Callback Hell)
- 使用
Promise.all()
并行处理任务 - 理解事件循环机制
异步示例
async function fetchData() {
try {
const response = await fetch('/api/data');
const data = await response.json();
console.log(data);
} catch (error) {
console.error('Error fetching data:', error);
}
}
ES6+ 高级特性
探索 Proxy
、Symbol
、WeakMap
等特性提升代码灵活性。
🛠 推荐用法
Proxy
实现数据拦截Symbol
作为唯一键值WeakMap
管理内存敏感对象
扩展阅读
图片关键词:闭包示意图, 原型链结构图, ES6特性图