let、const和var的区别?

博客介绍了JavaScript中三种定义变量的方式,即var、let和const。var有变量提升,可重复定义,能跨块访问;let无变量提升,不能重复定义,无跨块访问能力;const无变量提升,不能重复定义常量,有块级作用域,定义时必须赋值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在JavaScript中有三种定义变量的方式,分别为 var let和const,他们之间有什么区别呢,跟着我一起学习吧!

var

  • 使用var声明的变量有变量提升,不会报错,会输出undefined
  • 可以重复定义同一个变量
  • 可以跨块访问
  • 不能跨函数访问
  • 可以不用有初始值,不会报错,会输出undefined
// 使用var声明的变量有变量提升,不会报错,会输出undefined
console.log(a)  // undefined
var a = 1
console.log(a)  // 1
        
// 可以重复定义同一个变量
var a = 1
var a = 2 
console.log(a) // 2
// 可以跨块访问
{
    var a = 1
    let b = 2
    const c = 3
    console.log(a)  // 1
    console.log(b) // 2
    console.log(c) // 3
}
console.log(a) // 1
console.log(b) // b is not defined
console.log(c) // c is not defined
// 不能跨函数访问
function aa(){
    var a = 1
}
console.log(a) //  a is not defined
// 可以不用有初始值,不会报错,会输出undefined
var a
console.log(a) // undefined

let

  • 没有变量提升
  • 不能重复定义同一个变量
  • 不能跨块访问
  • 不能跨函数访问
  • 可以不用有初始值,不会报错,会输出undefined
// 没有变量提升
console.log(a)  // 'a' before initialization at
let a = 1  
console.log(a)  // 1
// 不能重复定义同一个变量
let a = 1
let a = 2
console.log(a)  // Identifier 'a' has already been declared
// 不能跨块访问
{
    var a = 1
    let b = 2
    const c = 3
    console.log(a) // 1
    console.log(b) // 2
    console.log(c) // 3
}
console.log(a) // 1
console.log(b) // b is not defined
console.log(c) // c is not defined
// 不能跨函数访问
function aa(){
    let a = 1
}
console.log(a)  // a is not defined
// 可以不用有初始值,不会报错,会输出undefined
let a
console.log(a) // undefined

const

  • 没有变量提升
  • 不能重复定义同一个常量
  • 有块级作用域
  • 定义的常量必须要赋值,有初始值
  • 虽说是常量,一旦定义不能改变.但是也不是绝对的,可以通过数组和对象来改变里面值
// 不能重复定义同一个常量
    const a = 1
    const a = 2
    console.log(a)  // Identifier 'a' has already been declared
// 有块级作用域
    {
        const a = 1
        console.log(a) // 1
    }
    // console.log(a)  // a is not defined
// 定义的常量必须要赋值,有初始值
    const a
    const b = 1
    console.log(a)//  Missing initializer in const declaration
    console.log(b) // 1
// 虽说是常量,一旦定义不能改变.但是也不是绝对的,可以通过数组和对象来改变里面值
    // 一般常量
    const a = 10
    a = 20
    console.log(a)  // 无法改变  Assignment to constant variable.
    // 数组形式  unshift shift pop push
    const a = [1,2,3,4,5] // [1,2,3,4,5]
    a.push(6)  
    console.log(a)  // [1, 2, 3, 4, 5, 6]
    // 对象形式
    const a = {name:'李四',age:18}
    a.name = "王五"   
    console.log(a)  // {name: "王五", age: 18}
### JavaScript 中 `var`、`let` `const` 的区别 #### 1. 变量作用域 在函数内部使用 `var` 声明的变量具有函数级作用域,而在全局范围内声明则属于全局对象的一部分。相比之下,`let` `const` 提供了更严格的块级作用域,在大括号 `{}` 内定义的内容仅限于该代码块内有效[^1]。 ```javascript function example() { var a = "global"; if (true) { var a = "local"; // 这里的a会覆盖外部的a console.log(a); // 输出 'local' } console.log(a); // 输出 'local',因为var有变量提升现象 } example(); ``` 对于 `let` 或 `const` 来说: ```javascript function anotherExample() { let b = "outside"; if (true) { let b = "inside"; // 不会影响外层b console.log(b); // 输出 'inside' } console.log(b); // 输出 'outside' } anotherExample(); ``` #### 2. 变量提升(Hoisting) 当使用 `var` 关键字时,即使是在条件语句或其他结构之后初始化变量,也会被认为是在其所在的作用域顶部被创建并赋予 undefined 值;而 `let` `const` 则不会发生这种行为,直到执行到具体的声明位置才会真正建立绑定关系,并且在此之前访问这些变量会导致引用错误。 #### 3. 是否允许重新赋值 - 使用 `var` 定义后的变量可以在任何地方再次分配新值; - 对于 `let` 而言,虽然也可以改变已有的数值,但是不允许在同一作用域下重复声明相同名称的变量; - 至于 `const` ,一旦设定就不能更改所指向的数据地址,不过如果是指向复杂数据类型的实例,则仍能修改其中属性或元素而不违反常量特性。 ```javascript // 正确用法 const obj = { key: 'value' }; obj.key = 'newValue'; // 合法操作 // 错误尝试 const num = 5; num = 10; // 抛出TypeError异常 ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值