js let 和 var 的区别

在 JavaScript 中,letvar 都是用来声明变量的关键字,但它们之间存在一些重要的区别:

  1. 作用域(Scope)var 在声明变量时具有函数级作用域,这意味着在函数内部用 var 声明的变量在整个函数内部都是可见的。而 let 具有块级作用域,它在声明变量时只在该块(以及任何包含块)内部可见。
function testVar() {
    var x = 10;
    let y = 20;
    if(true) {
        var x = 30;  // 这是合法的,因为 x 的作用域是整个函数
        console.log(x);  // 输出 30
    }
    console.log(x);  // 输出 30
    console.log(y);  // 输出 20
}

testVar();

在上述例子中,我们在 if 块内部重声明了 x,这是合法的,因为 x 的作用域是整个函数。然而,我们在 if 块内部试图访问 y,这将导致错误,因为 y 的作用域仅限于包含它的块。
2. 提升(Hoisting):在 JavaScript 中,变量的声明会被“提升”到它们所在的作用域的顶部。这意味着你可以在声明之前使用变量。对于 var 声明的变量,会发生提升。但是对于 letconst 声明的变量,虽然也会被提升,但是你不能在声明之前访问它们(尝试这样做会抛出错误)。

console.log(x);  // 在 let x = 10; 之前,尝试访问 x 会抛出错误
let x = 10;
  1. 可重复声明:使用 var 可以多次声明同一个变量,而 let 在同一个作用域内不允许重复声明同一个变量。
  2. 全局作用域:在全局作用域中,var 声明的变量会成为全局对象(通常是 window)的属性,而 let 声明的变量不会。
  3. 块级作用域的独立性:使用 let 声明的变量在每个块(以及包含块)中都具有自己的独立作用域,即使这些块嵌套在一起。这意味着在嵌套的块中声明的变量不会与外部块的变量共享作用域。
  4. const 关键字constlet 的一个特殊形式,它用于声明一个只读的常量。一旦一个变量被 const 声明,它的值就不能改变(除非它被重新声明)。注意,对于对象和数组来说,只有对象的属性(而非对象本身)可以被声明为只读的。
  5. 全局环境中的差异:在浏览器环境中,使用 var 在全局作用域声明的变量将成为 window 对象的一个属性,而在 Node.js 中则不会。然而,使用 letconst 在全局作用域中声明的变量在两者中都不会成为 window 或全局对象的属性。
  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值