JavaScript中var,let,const三者的特点和区别

在JavaScript中,varletconst 都是用来声明变量的关键字。通常推荐使用 letconst 来代替 var,以避免一些由于变量提升和作用域问题导致的潜在错误。

1. 变量作用域

- var 声明的变量具有局部作用域(在函数中使用)或全局作用域(非函数区域内使用)

- let 和 const 声明的变量具有块级作用域

var a = 1; // 全局作用域
function testScope() {
    var x = 5; // 函数作用域
    if (true) {
        let y = 10; // 块级作用域
        const z = 15; // 块级作用域
        console.log(x, y, z); // 5, 10, 15
    }
    console.log(x, y, z); // 5, ReferenceError: y is not defined, ReferenceError: z is not defined
}
console.log(a); // 1
testScope();

2. 变量提升

- var 声明的变量会被提升到其作用域的顶部,并且初始化为 undefined

- let 和 const 声明的变量也会被提升,但在声明之前访问会导致引用错误(暂时性死区)

console.log(a); // undefined
var a = 3;

// 以上代码实际编译过程
var a;
console.log(a); // undefined
a = 3;

// 以下代码会导致ReferenceError
console.log(b);
let b = 3;

3. 重复声明

var 可以在同一作用域内重新声明同一个变量

- let 和 const 在同一作用域内不能重新声明同一个变量,let在不同作用域有重复声明不会报错

var color = "blue";
var color = "red"; // 允许

// 下面的代码会导致SyntaxError
let size = "medium";
let size = "large";

// 下面的代码会导致SyntaxError
const shape = "circle";
const shape = "square";

4. 变量赋值

var 和 let 声明的变量可以被重新赋值

- const 用来定义常量,在声明 const 变量的同时必须给它赋一个初始值

const 声明的变量是常量,一旦赋值后就不能再改变。但对于对象或数组等复杂类型,内部属性是可以修改的,只是不能将 const 变量本身重新指向一个新的对象或数组

var count = 1;
count = 2; // 允许

let quantity = 3;
quantity = 4; // 允许

const max = 5;
// max = 6; // TypeError: Assignment to constant variable.

const person = { name: "Alice" };
person.name = "Bob"; // 允许,因为只改变了对象的内容,而不是指向的对象本身
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值