🎬 HoRain云小助手:个人主页
🔥 个人专栏: 《Linux 系列教程》《c语言教程》
⛺️生活的理想,就是为了理想的生活!
⛳️ 推荐
前些天发现了一个超棒的服务器购买网站,性价比超高,大内存超划算!忍不住分享一下给大家。点击跳转到网站。
专栏介绍
专栏名称 | 专栏介绍 |
《C语言》 | 本专栏主要撰写C干货内容和编程技巧,让大家从底层了解C,把更多的知识由抽象到简单通俗易懂。 |
《网络协议》 | 本专栏主要是注重从底层来给大家一步步剖析网络协议的奥秘,一起解密网络协议在运行中协议的基本运行机制! |
《docker容器精解篇》 | 全面深入解析 docker 容器,从基础到进阶,涵盖原理、操作、实践案例,助您精通 docker。 |
《linux系列》 | 本专栏主要撰写Linux干货内容,从基础到进阶,知识由抽象到简单通俗易懂,帮你从新手小白到扫地僧。 |
《python 系列》 | 本专栏着重撰写Python相关的干货内容与编程技巧,助力大家从底层去认识Python,将更多复杂的知识由抽象转化为简单易懂的内容。 |
《试题库》 | 本专栏主要是发布一些考试和练习题库(涵盖软考、HCIE、HRCE、CCNA等) |
目录
⛳️ 推荐
专栏介绍
🔍 提升的底层原理
💡 实用建议与最佳实践
💎 总结
JavaScript 中的声明提升(Hoisting)是其特有的机制,了解它能帮你写出更严谨的代码。下面通过一个表格快速了解其核心规则:
声明类型 | 是否被提升 | 初始化值 | 备注 |
|---|---|---|---|
| ✅ 是 |
| 只有声明被提升,赋值留在原地 |
| ✅ 是 | 完整的函数定义 | 整个函数体都会被提升 |
函数表达式 | ⚠️ 仅变量部分 |
| 实质是变量赋值,遵循变量提升规则 |
| ❌(概念上) | 未初始化(存在暂时性死区) | 在声明前访问会报错,行为如同未被提升 |
🔍 提升的底层原理
声明提升与 JavaScript 的代码执行流程有关。JavaScript 引擎在执行代码前会先进行编译,在这个过程中,它会找到当前作用域内所有的变量和函数声明,并在内存中提前为它们“预留”好空间。
var声明的变量:引擎会为其提前分配内存,并初始化为undefined。函数声明:引擎会完整地创建函数对象,使其在执行前就可调用。
需要明确的是,声明提升是编译阶段 发生的,可以理解为引擎在“头脑中”将声明移到了顶部,但代码文件本身并没有被物理移动。
💡 实用建议与最佳实践
理解声明提升主要是为了规避其带来的陷阱,以下是更稳健的编码习惯:
优先使用
let和const:它们提供的块级作用域和暂时性死区能有效避免因提升引发的意外,让代码行为更可预测。保持先声明后使用:即使函数声明会被提升,将函数定义放在调用语句之前,能显著提升代码的可读性。
在作用域顶部声明变量:如果使用
var,主动将其声明放在函数或代码块的开始处,这符合提升的机制,能让代码意图更清晰。
💎 总结
声明提升是 JavaScript 的基础特性。最关键的实践是:在现代开发中,优先使用let和const,并养成先声明后使用的习惯,这样可以最大限度地避免提升带来的混淆。
希望这些解释能帮助你更清晰地理解 JavaScript 声明提升。如果你对某个特定场景有疑问,我很乐意进一步探讨。
❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄
💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍
🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙