var let const 关键字之间的区别

1.var 关键字
特点:

在全局作用域下使用var关键字声明变量,则该变量为全局变量。在函数内声明,在该变量为局部变量,只在函数内有效

声明过程:

遇到有var关键字声明的作用域,在任何语句执行前都已经完成了该变量的声明和初始化。(也就是变量提升并取回undefined的原因)

内存分配:

var关键字会直接在栈内存里预分配内存空间。然后等到实际赋值的时候再去存储对应变量。

变量提升:

var关键字是对变量的创建和初始化都进行了变量提升。所以赋值之前可以取到undefined

eg:
console.log(a) // undefined
var a = 11;
console.log(a) // 11
2.let 关键字
特点:

let声明的变量只在当前代码块内有效

声明过程:

解析器进入一段代码块,当发现let关键字。变量只是先完成声明,并不会初始化。如果在此时访问变量,则会报错(暂时性死区)。等到解析到有let那一行代码的时候,才会对变量进行初始化。如果有let那一行是赋值操作,则初始化与赋值同时进行。

内存分配:

let关键字不仅不会去栈内存中区预分配内存空间,还会在栈内存分配变量时候去做检查,发现同名变量则会报错

变量提升:

let关键字只是在创建的时候提升。初始化的过程并未提上,所以产生暂时性死区。

eg:
console.log(aa) // 报错
console.log(bb) // 报错
let aa = 1;
function test(){
	let bb = '2'
	console.log(aa) // 1
	console.log(bb) // 2
}
test()
console.log(aa) // 1
console.log(bb) // 报错
const 关键字
特点:

const关键字用来声明常量。该常量不允许修改。
const关键字声明的常量不允许修改的是内存地址。当常量声明的是基础类型(string,number,boolean等)内存位置即为对应变量的值时,则进行重新赋值操作即会报错。若声明的常量是object,const不允许修改的是栈内存指针,则object的属性值还是可以进行重新赋值操作。

声明过程:

解析器进入一段代码块,当发现const关键字。变量只是先完成声明,并不会初始化。等到解析到有const关键字那一行赋值代码,才会对变量进行初始化并且赋值。

内存分配:

同let关键字一样。不仅不会去栈内存中区预分配内存空间,还会在栈内存分配变量时候去做检查,发现同名变量则会报错

变量提升:

同let关键字一样。const关键字只是在创建的时候提升,初始化和赋值不进行提升

eg:
const a = '1112';
// a = 'asda';  // 此一行代码会报错
console.log(a) // 1112
const b = {
	name: 'asda'
}
b.name = 'afzczxczxc'
console.log(b.name) // afzczxczxc
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值