var、let、const

本文详细介绍了ES6中新增的let和const关键字,对比了它们与var的区别。let具有块级作用域,不允许重复声明,不进行变量提升;const同样具有块级作用域,声明时必须赋值,且值不可改变。此外,const对象或数组的属性或元素可以修改。总结了var、let和const的关键特性,帮助理解它们在实际开发中的应用。
摘要由CSDN通过智能技术生成

var && let && const


对前端感兴趣的可以关注一下我的博客,会持续更新前端相关的知识和学习笔记,一起学习。

在ES6之前,声明变量一直都是使用 var ,ES6新增了 let 和 const,那么它们之间有什么不同呢?

var

使用 var 声明的变量,没有块作用域,可以跨域访问,即:

{
	var a = 1
}
// 在块 {} 外依然可以访问到 a
console.log(a);  // 1

// 循环作用域内也是如此
var i = 5;
for (var i = 0; i < 10; i++){}
console.log(i); // 10

同时,使用 var 声明的变量可以先使用,在声明,即变量提升,并且允许重新声明变量

console.log(a);  // 这是允许的,但 a 的值为 undefined
var a = 1;

// 重新声明变量
var a = 2;
console.log(a);  // 2

var 声明的全局变量可以属于window对象:

var a = 1;
// 可以使用 window.a 访问
console.log(window.a); // 1
// 使用 window 访问未声明的变量时,不会报错
console.log(window.x); // undefined

let

使用 let 声明的变量拥有块作用域,只能在块作用域内访问:

let a = 1
{
  console.log(a); // 1 这里的 a 是全局变量,因此可以访问
  let x = 2;
}

console.log(x); // x is not defined,x 是在{}内声明的,因此外部访问不到 x

let 声明的变量与 var 不同,不能先使用再声明,必须先声明,再使用

console.log(a); //  ReferenceError
let a = 1;
console.log(a); // 1

同一作用域或同一块中,不能使用 let 重新声明变量,并且通过 let 声明的全局变量不属于 window 对象:如:

let x = 5;
let x = 10; //  SyntaxError 不允许重新声明变量
// 但不同块或作用域内可以重新声明
{
	let x = 20;
}
// 循环作用域也是如此,同时可以解决使用 var 声明时影响到其他作用域变量的问题
let i = 5;
for(let i = 0; i < 10; i++){}
console.log(i); // 5 for循环内声明的 i 不会影响到全局中的 i
// 不能使用 window.i 访问到 i
console.log(window.i); // undefined

const

const 与 let 类似,但使用 const 声明的变量,必须在声明的同时赋值

const a; // SyntaxError

const a = 1;
a = 5;  // TypeError Assignment to constant variable.
const a = 5; // SyntaxError Identifier 'a' has already been declared

但使用 const 声明的对象或数组,可以添加或更改对象或数值内的值,但不能给对象或数组重新赋值,因为它没有定义常量值。它定义了对值的常量引用。

const lol = ["EZ","VN"];
lol[0] = "Riven";
lol.push("MHT")
console.log(lol); // ["Riven","VN","MHT"]

// 添加或更改对象内的值也是允许的
const LOL = {ADC:"EZ", TOP: "Riven"}
LOL.ADC = "WSC";
LOL.MID = "Faker";
console.log(LOL); {ADC:"WSC", TOP: "Riven", MID: "Faker"}

总结

  1. var 声明的变量没有块作用域,但 let 和 const 声明的变量有块作用域
  2. var 声明的变量拥有变量提升,可以先使用,再声明,但 let 和 const 没有,必须先声明,再使用。
  3. var 声明的全局变量属于 window 对象,let 和 const 声明的变量不属于,不能通过window访问。
  4. 同一作用域或块中,不能使用 let 和 const 重新声明变量,但 var 可以。
  5. var 和 let 可以先声明再赋值,但 const 必须在声明时赋值,否则报错。
  6. const 声明的变量不能重新赋值,但允许添加或更改对象或数组内的值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值