js let 和 var 的区别
2023-12-21 17:18:31
在 JavaScript 中,let
和 var
都是用来声明变量的关键字,但它们之间存在一些重要的区别:
- 作用域(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
声明的变量,会发生提升。但是对于 let
和 const
声明的变量,虽然也会被提升,但是你不能在声明之前访问它们(尝试这样做会抛出错误)。
console.log(x); // 在 let x = 10; 之前,尝试访问 x 会抛出错误
let x = 10;
- 可重复声明:使用
var
可以多次声明同一个变量,而let
在同一个作用域内不允许重复声明同一个变量。 - 全局作用域:在全局作用域中,
var
声明的变量会成为全局对象(通常是window
)的属性,而let
声明的变量不会。 - 块级作用域的独立性:使用
let
声明的变量在每个块(以及包含块)中都具有自己的独立作用域,即使这些块嵌套在一起。这意味着在嵌套的块中声明的变量不会与外部块的变量共享作用域。 - const 关键字:
const
是let
的一个特殊形式,它用于声明一个只读的常量。一旦一个变量被const
声明,它的值就不能改变(除非它被重新声明)。注意,对于对象和数组来说,只有对象的属性(而非对象本身)可以被声明为只读的。 - 全局环境中的差异:在浏览器环境中,使用
var
在全局作用域声明的变量将成为window
对象的一个属性,而在 Node.js 中则不会。然而,使用let
和const
在全局作用域中声明的变量在两者中都不会成为window
或全局对象的属性。
文章来源:https://blog.csdn.net/Rockandrollman/article/details/135132108
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!