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 或全局对象的属性。

相关推荐

  1. LetVar区别

    2024-01-16 13:52:02       58 阅读
  2. js let var 区别

    2024-01-16 13:52:02       61 阅读
  3. var、let const声明变量有什么区别

    2024-01-16 13:52:02       69 阅读
  4. var、let、const 区别

    2024-01-16 13:52:02       64 阅读
  5. var, let, const 区别

    2024-01-16 13:52:02       35 阅读
  6. letvar区别 (最全)

    2024-01-16 13:52:02       55 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-16 13:52:02       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-16 13:52:02       106 阅读
  3. 在Django里面运行非项目文件

    2024-01-16 13:52:02       87 阅读
  4. Python语言-面向对象

    2024-01-16 13:52:02       96 阅读

热门阅读

  1. Unix Network Programming Episode 84

    2024-01-16 13:52:02       36 阅读
  2. Leetcode刷题(二十四)

    2024-01-16 13:52:02       59 阅读
  3. 01-15网络编程-XML

    2024-01-16 13:52:02       48 阅读
  4. vue选项式API和组合式Api

    2024-01-16 13:52:02       69 阅读
  5. this的指向

    2024-01-16 13:52:02       47 阅读
  6. 条款41:了解隐式接口和编译器多态

    2024-01-16 13:52:02       62 阅读
  7. C++面试合集问题之堆、栈

    2024-01-16 13:52:02       45 阅读
  8. c语言中文件读入处理写入实战

    2024-01-16 13:52:02       55 阅读
  9. 2.1 数组

    2024-01-16 13:52:02       55 阅读