JavaScript 中 var 和 let 的区别


javascript 中声明变量,我们可以使用 varletconst 关键字。早期,var 是 JavaScript 中声明变量的唯一方法。在 ES6 中,引入了 let 和 const 关键字作为声明变量的更好方法。现在建议使用 let 而不是 var 来声明变量。

在这篇文章中,我们将了解 JavaScript 中 var 和 let 之间的区别。我们将根据表格中提到的特性来区分 let 和 var。

特性 let var
作用域 let 关键字是块级作用域。 var 关键字是函数作用域。
重新声明 如果变量已在作用域中声明,则不能重新声明该变量。 可以在相同作用域中重新声明变量。
提升 使用 let 关键字声明的变量会被提升,但由于暂时性死区 (TDZ),它会返回一个 ReferenceError。 是的,var 关键字允许提升。
暂时性死区 (TDZ) 在声明变量之前存在 TDZ。 TDZ 不存在。如果在声明之前使用,它会返回 undefined。
全局对象属性 在全局作用域中,let 不会成为全局对象的属性。 在全局作用域中,var 会成为全局对象的属性。

示例 1

在这个例子中,我们在 if 语句(在函数内部)中使用 **let** 和 **var** 声明了变量。但是,输出只显示 var 关键字的结果,因为它具有函数作用域,而 let 具有块作用域。

<!DOCTYPE html>
<html lang="en">
<head>
    <title>
        Scope in let and var
    </title>
</head>
<body>
    <div id="varkey"></div>
    <div id="letkey"></div>
    <script>
        function fun() {
            if (true) {
                var x = 50;
                let y = 20;
            }
            document.getElementById("varkey")
                .innerHTML = "var x = " + x;
            document.getElementById("letkey")
                .innerHTML = "let y = " + y;
        }
        fun();
    </script>
</body>
</html>

示例 2

在这个例子中,我们在声明之前使用 **var** 关键字调用变量,输出显示 **undefined**,而 **let** 关键字则抛出 **ReferenceError**。

<!DOCTYPE html>
<html lang="en">
<head>
    <title>Document</title>
</head>
<body>
    <div id="varkey"></div>
    <script>
        document.getElementById("varkey")
            .innerHTML = "var x = " + x;
        var x= 10;
    </script>
</body>
</html>

结论

在这篇文章中,我们基于各种特性(例如 **作用域**、**重新声明**、**提升**、**TDZ** 和全局对象属性)以及示例,讨论了 let 和 var 关键字之间的区别。

更新于:2024年11月22日

4K+ 次查看

启动你的 职业生涯

通过完成课程获得认证

开始学习
广告
© . All rights reserved.