var,let,const

理解作用域与变量提升
本文探讨了在Chrome浏览器环境中作用域的概念,包括全局作用域、函数作用域和块级作用域,并解释了变量提升的现象。特别关注了使用`let`和`const`声明变量时形成的块级作用域特性。

首先需要理解作用域:全局作用域、函数作用域、块级作用域(block scope)

变量提升的概念

前提:在chrome浏览器环境下

全局作用域:

      

函数作用域:

        

块级作用域:

       通过let,const 在 {  }中声明变量,可形成块级作用域

       

     但是令人怪异的是

      

      在for循环的 { } 中可以获取到声明的 'block scope'  i 但是却获取不到  ( ) 中的 i,令人十分诧异

    

 

 

在 JavaScript 中,`var`、`let` 和 `const` 是用于声明变量的关键字,它们之间存在一些重要的区别,在不同场景下有不同的使用方式。 ### 区别 1. **作用域**: - `var` 声明的变量属于函数作用域。如果在函数外声明,它就是全局作用域;如果在函数内声明,只在该函数内部可访问。例如: ```javascript function example() { var x = 10; console.log(x); // 10 } example(); console.log(x); // 报错,x 未定义 ``` - `let` 和 `const` 声明的变量属于块级作用域。块级作用域由 `{ }` 包括,像 `if` 语句和 `for` 语句里面的 `{ }` 也属于块作用域。例如: ```javascript { let y = 20; const z = 30; console.log(y); // 20 console.log(z); // 30 } console.log(y); // 报错,y 未定义 console.log(z); // 报错,z 未定义 ``` 2. **变量提升**: - `var` 存在变量提升现象。即变量可以在声明之前使用,值为 `undefined`。例如: ```javascript console.log(a); // undefined var a = 5; ``` - `let` 和 `const` 没有变量提升现象。在声明之前访问会导致引用错误(ReferenceError),这一区域被称为“暂时性死区”。例如: ```javascript console.log(b); // 报错,ReferenceError let b = 10; ``` 3. **重复声明和修改**: - `var` 变量可以重复声明。例如: ```javascript var num = 1; var num = 2; console.log(num); // 2 ``` - 在同一个块级作用域,`let` 变量不能重新声明。例如: ```javascript let count = 1; let count = 2; // 报错,SyntaxError ``` - `const` 变量一旦定义,无法更改,无法重复赋值。它是常数变量,一般在引入一个模块或者定义一些全局常量时使用。例如: ```javascript const PI = 3.14; PI = 3.1415; // 报错,TypeError ``` ### 使用场景 - **`var`**:在需要兼容旧版 JavaScript 代码,或者需要变量提升特性时可以使用。不过在现代 JavaScript 开发中,由于其存在的一些问题(如变量提升可能导致意外结果),使用场景逐渐减少。 - **`let`**:当需要在块级作用域内声明变量,并且后续可能需要对变量进行重新赋值时使用。例如在 `for` 循环中: ```javascript for (let i = 0; i < 5; i++) { console.log(i); } ``` - **`const`**:当变量的值不需要改变,如定义常量、引入模块时使用。例如: ```javascript const MAX_USERS = 100; const myModule = require('./myModule'); ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值