JavaScript闭包、原型链、事件循环,一文彻底讲明白(小白也能懂)

你是不是也看过无数文章,却被"闭包是函数嵌套"、"原型链就是__proto__"、"事件循环是宏任务微任务"搞得一头雾水?别急,今天我用生活比喻+代码实例,带你30分钟彻底搞懂JavaScript三大核心概念,从此面试不再慌!

一、闭包:函数的"记忆体"

什么是闭包?

简单说:一个函数记住了它创建时的环境,即使外部函数执行完了,它依然能访问那个环境里的变量。

🌰 比如你去奶茶店点单,服务员记住了你上次说"少糖",这次你还没说,她就知道怎么做------这就是"记忆"。

复制代码
function outer() {
    let name = "小明";
    function inner() {
        console.log(name); // 能访问到name
    }
    return inner;
}
const fn = outer();
fn(); // 输出:小明 → 闭包形成!

✅ 闭包用途:封装私有变量、防抖节流、模块化。

🔗 二、原型链:JS的"家族传承"

JS中没有类,对象怎么继承?靠原型链!

每个对象都有一个 proto(或 [[Prototype]]),指向它的"爸爸"(构造函数的 prototype)。

🌰 比如你爷爷会打铁,爸爸会,你也会------这就是"链式传承"。

复制代码
function Person(name) {
    this.name = name;
}
Person.prototype.sayHi = function() {
    console.log("你好,我是" + this.name);
};

const p = new Person("小红");
p.sayHi(); // 你好,我是小红
// p → 找sayHi → 没有 → 去__proto__找 → 找到了!

✅ 记住一句话:当你调用一个方法,JS会沿着 proto 一直往上找,直到 null ------ 这就是原型链。

⏳ 三、事件循环:JS的"单线程大脑"

JS是单线程,但为什么能异步?靠事件循环(Event Loop)!

🌰 比如你在餐厅吃饭:

先点菜(同步代码)

然后告诉服务员"菜好了叫我"(setTimeout)

你继续刷手机(不卡住)

菜好了,服务员叫你(回调执行)

复制代码
console.log(1);
setTimeout(() => console.log(2), 0);
Promise.resolve().then(() => console.log(3));
console.log(4);

// 输出顺序:1 → 4 → 3 → 2

✅ 执行顺序:

同步代码 → 微任务(Promise) → 宏任务(setTimeout)

✅ 总结一句话:

闭包:函数记住"过去"的变量

原型链:对象向上"找爸爸"

事件循环:JS一边干活一边"等通知"

🔥 收藏这篇,面试官再问,你直接稳稳回答,还能讲得通俗易懂!

👉 关注我,下期讲《Vue响应式原理,一张图看懂》!

你觉得哪个最难?评论区聊聊! 💬

相关推荐
阿钱真强道7 小时前
11 JetLinks MQTT 直连设备功能调用完整流程与 Python 实现
服务器·开发语言·网络·python·物联网·网络协议
£漫步 云端彡8 小时前
Golang学习历程【第十二篇 错误处理(error)】
开发语言·学习·golang
Cinema KI8 小时前
C++11(中):可变参数模板将成为重中之重
开发语言·c++
凯子坚持 c8 小时前
C++基于微服务脚手架的视频点播系统---客户端(2)
开发语言·c++·微服务
Vivienne_ChenW8 小时前
Spring 事件驱动用法总结
java·开发语言·spring boot·spring
Beginner x_u8 小时前
JavaScript 中浅拷贝与深拷贝的差异与实现方式整理
开发语言·javascript·浅拷贝·深拷贝
柯一梦8 小时前
STL2--vector的介绍以及使用
开发语言·c++
云霄IT8 小时前
go语言post请求遭遇403反爬解决tls/ja3指纹或Cloudflare防护
开发语言·后端·golang
自动化控制仿真经验汇总8 小时前
电子抑振控制实验中MATLAB+示波器的用法-PART-RIGOL-电磁制振
开发语言·matlab
凯子坚持 c8 小时前
C++基于微服务脚手架的视频点播系统---客户端(3)
开发语言·c++·微服务