var、let、const的区别

变量提升

1.var 声明

var 声明变量的时候会有生命提升,但仅是声明会提升,赋值不会提升例如:

console.log(num); // undefined var num 会被提升
var num = 10;

会被解析为

var num // 声明被提升了 
console.log(num); //此时变量的状态是声明未赋值,所以变量值为undefined
num = 10; // 赋值未被提升

2.let 声明

let声明的变量不提升

// let声明的变量不提升
console.log(num); // Cannot access 'num' before initialization
// 在初始化之前无法访问“num”
let num = 10; 

3.const声明

let声明的变量不提升

// 没有变量提升
console.log(a); // Cannot access 'a' before initialization
// 在初始化之前无法访问“a”
const a = 10;

作用域

var

var在函数内部声明的变量只在该函数内部有效,而在函数外部声明的var变量为全局变量,全局有效

function example() {
  var x = 1;
  console.log(x); // 输出 1
}

console.log(x); // 报错,x未定义

var y = 2;
console.log(y); // 输出 2

let 和 const

let和const的作用域是块级作用域。块级作用域是指在{}中的任何地方声明的变量只在该块内部有效。例如:

function example() {
  if (true) {
    let x = 1;
    var y = 2;
    const z = 3;
    console.log(x); // 输出 1
    console.log(y); // 输出 2    
    console.log(z); // 输出3
  }
  
  console.log(x); // 报错,x未定义
  console.log(y); // 输出 2
  console.log(z); // 报错,z未定义
}
example()
console.log(x); // 报错,x未定义
console.log(y); // 输出 2
console.log(z); // 报错,z未定义

重复声明

var

var x = 1;
console.log(x); // 输出 1

var x = 2;
console.log(x); // 输出 2

let

let y = 1;
console.log(y); // 输出 1

let y = 2; // 报错,重复声明变量y

const

const z = 1;
console.log(z); // 输出 1

const z = 2; // 报错,重复声明常量z

暂时性死区

let、const和var都存在"暂时性死区"的概念。在一个作用域中,当使用let或const声明一个变量或常量时,该变量或常量会在声明之前被绑定到该作用域。

var name = 'window';
if(1) {
	// 无法访问外部变量
	console.log(name);  //  Cannot access 'name' before initialization 			
	const name = 'const'
}

值能否修改

除了const声明的不能修改,let 和 var 声明的变量都能够修改

const a = 10;
a = 20
console.log(a); // 报错const声明的变量不能被修改
varletconst
变量提升
能否被修改
必须赋初值
能否重复声明
作用域全局
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我的头发,在哪里!!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值