曾经有一段时间,我使用并理解了 JavascrIPt 中 let、const 和 var 的实际用法,但用语言解释它是具有挑战性的。如果您发现自己处于类似的困境,那么需要关注的关键点是范围、提升、重新初始化和重新分配方面的差异。
范围:
- 如果在任何函数外部声明,则 var 是函数作用域或全局作用域。
var 示例(函数和全局作用域)
| 1 2 3 4 5 6 7 8 9 10 11 12 | 
 
 
 
 
 
 
 
 
 
 
 
 | 
- let 和 const 是块作用域的,这意味着它们只能在声明它们的块(由 {} 分隔)内访问。
let 示例(块作用域)
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 
const 示例(块作用域)
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 
吊装
提升就像在开始任务之前设置一个工作空间。想象一下你在厨房里,准备做饭。在开始烹饪之前,请将所有食材和工具放在柜台上,以便触手可及。
在编程中,当您编写代码时,javascript 引擎会在实际运行代码之前检查您的代码,并将所有变量和函数设置在其作用域的顶部。这意味着您可以在代码中声明函数和变量之前使用它们。
- 
所有三个(var、let 和 const)确实都被提升了。不过不同之处在于它们在吊装过程中是如何初始化的。 
- 
var 被提升并初始化为 undefined。 
| 1 2 | 
 
 | 
- let 和 const 被提升但未初始化。这意味着从块开始到遇到声明,它们处于“临时死区”。
| 1 2 3 | 
 
 
 | 
| 1 2 3 | 
 
 
 | 
重新分配和重新初始化:
- var 可以重新初始化(再次声明)和重新分配(分配新值)。 ### 使用 var 的示例
| 1 2 3 4 5 6 | 
 
 
 
 
 
 | 
- let 不能在同一范围内重新初始化,但可以重新分配。
| 1 2 3 4 5 | 
 
 
 
 
 | 
- const 不能重新赋值;它必须在声明时初始化。但是,如果 const 是对象或数组,则可以修改对象或数组的内容(属性或元素)。 ### 使用 const 的示例
| 1 2 3 4 | 
 
 
 
 | 
const 对象的示例
| 1 2 3 4 5 | 
 
 
 
 
 | 
const 数组的示例
| 1 2 3 4 5 | 
 
 
 
 
 | 


 
        

 
															 
                 
                 
                     
         
         
         
        
 
                         
                         
                         
                         
                        

 
                         
                         
                        