let 和 const 关键字

一. let关键字

作用:用于声明变量

let 变量名;
let 变量名 =;
与 var 声明 的 变量相比,let 声明的变量具有如下特点:
  1. let 声明的变量不能重复声明。(let 也不能重复声明 var 声明过的变量)
  2. let 声明的变量除了具有全局作用域和函数内部作用域之外,还有块级作用域。
  3. let 声明的全局变量不在作为全局对象的属性。
  4. let 声明的变量不会变量提升

二. const关键字

作用:用于定义常量。

常量:一种特殊的变量,值不能修改。

const 声明的变量和 let 声明的变量区别

值不能修改

const 也具备 let 声明变量的4个特点:
  1. 不能重复声明。
  2. 具有块级作用域。
  3. 全局变量不会再作为全局对象的属性
  4. 不会变量提升
JavaScript 里 `var`、`let` `const` 关键字在使用上存在诸多区别,具体如下: ### 作用域 - **var**:`var` 声明的变量是函数作用域,不存在块级作用域,在外部可以访问到 `{}` 里面声明的变量。例如: ```javascript function testVar() { if (true) { var a = 'hello'; } console.log(a); // 输出: hello } testVar(); ``` - **let**:`let` 声明的变量具有块级作用域,在块级作用域外部无法访问。例如: ```javascript function testLet() { if (true) { let b = 10; } console.log(b); // 报错 ReferenceError: b is not defined } testLet(); ``` - **const**:`const` 同样具有块级作用域,在块级作用域外部无法访问。例如: ```javascript function testConst() { if (true) { const c = 20; } console.log(c); // 报错 ReferenceError: c is not defined } testConst(); ``` ### 变量提升 - **var**:使用 `var` 定义的变量会提前声明,如果变量没有定义就直接使用,代码不会报错,只会输出 `undefined`。例如: ```javascript console.log(x); // 输出: undefined var x = 10; ``` - **let**:`let` 不存在变量提升,在声明之前访问会导致 `ReferenceError`。例如: ```javascript console.log(y); // 报错 ReferenceError: Cannot access 'y' before initialization let y = 20; ``` - **const**: `let` 一样,`const` 也不存在变量提升,在声明之前访问会导致 `ReferenceError`。例如: ```javascript console.log(z); // 报错 ReferenceError: Cannot access 'z' before initialization const z = 30; ``` ### 重复声明 - **var**:`var` 定义的变量可以反复去定义,后面的会覆盖前面的。例如: ```javascript var num = 5; var num = 10; console.log(num); // 输出: 10 ``` - **let**:使用 `let` 声明的变量可以在其范围内更新,但不能在其范围内重新声明。例如: ```javascript let greeting = "Hello Waleed"; greeting = "Hello Everyone"; // 正常更新 // let greeting = "Hi"; // 报错 SyntaxError: Identifier 'greeting' has already been declared ``` - **const**:`const` 声明的变量不允许重新声明,且在声明变量的同时必须初始化变量,尝试修改 `const` 声明的变量会导致运行时错误。例如: ```javascript const age = 20; // age = 30; // 报错 TypeError: Assignment to constant variable. // const age = 40; // 报错 SyntaxError: Identifier 'age' has already been declared ``` ### 全局作用域 - **var**:在全局作用域中使用 `var` 声明的变量会成为 `window` 对象的属性。例如: ```javascript var globalVar = 'global'; console.log(window.globalVar); // 输出: global ``` - **let**:使用 `let` 在全局作用域中声明的变量不会成为 `window` 对象的属性。例如: ```javascript let globalLet = 'letGlobal'; console.log(window.globalLet); // 输出: undefined ``` - **const**:使用 `const` 在全局作用域中声明的变量也不会成为 `window` 对象的属性。例如: ```javascript const globalConst = 'constGlobal'; console.log(window.globalConst); // 输出: undefined ``` ### 循环中的表现 - **var**:`var` 在循环中使用时,循环体外依然可以使用,并且在循环中使用时可能会出现意外结果。例如: ```javascript for (var i = 0; i < 3; i++) { setTimeout(() => { console.log(i); // 输出: 3 3 3 }, 100); } ``` - **let**:`let` 在循环中会为每次迭代创建一个新的块级作用域,每个定时器都有自己独立的 `i` 值。例如: ```javascript for (let j = 0; j < 3; j++) { setTimeout(() => { console.log(j); // 输出: 0 1 2 }, 100); } ``` - **const**:`const` 在循环中使用时,如果在循环体内部不尝试修改该变量,也会为每次迭代创建一个新的块级作用域。但如果尝试修改会报错。例如: ```javascript for (const k = 0; k < 3; k++) { // 报错 TypeError: Assignment to constant variable. console.log(k); } ``` 如果使用 `for...of` 或 `for...in` 循环,`const` 可以正常使用: ```javascript const arr = [1, 2, 3]; for (const item of arr) { console.log(item); // 输出: 1 2 3 } ``` ### 优先级 声明变量的场景不同,三个关键字的使用也不同,优先级为 `const > let > var`。声明常量(只读的变量),用 `const`;声明块级作用域中的变量,用 `let`;声明全局变量,用 `var` [^1]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大雨林林

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值