c字段和变量有啥区别_var,let,const 的区别?

为了更好的了解var let const 的区别,我们就来简单的了解它们的过程

相信有很多人都会面临面试官问的这个问题

很多的同学都是简单的认为 var声明的变量会提升,而let const 不会,虽然可以这样认为,但不完全对,

经过几经波折,得出一个自己看得懂的结论

这次,我们就来看看它们三者的区别以及过程让我们可以更好的了解它们

在JS引擎解析代码的时候,遇到变量经历不同的声明方式的过程是不同的

1.通过var声明的变量过程

consloe.log(a);//输出结果为 undefined
var a = 'xu';
consloe.log(a);//输出结果为 xu

​过程如下:

​ 1.var声明的变量会提升到最顶部,创建出a变量

​ 2.创建完a变量后会初始化为undefined

​ 3.开始执行代码

​ 4.将变量值赋值给a变量

为什么在var声明变量之前输出这个变量为undefined的原因就一目了然了

2.通过let声明变量的过程

let a = 'xu1'
{
    consloe.log(a);//抛出错误Uncaught ReferenceError: Cannot access 'a' before initialization
    let a = 'xu2';
    a = 'xu3'
}
let a = 'xu4'//Uncaught SyntaxError: Identifier 'a' has already been declared

1.输出结果:无法在初始化之前访问 ' a ' 。

2.输出结果:标识符“a”已经声明

经过错误1.的提示,那么问题来了,let是会提升吗?

​ 过程如下:

​ 1.let声明的变量在创建过程中被提升

​ 2.开始执行代码,但未初始化 Temporary dead zone(也就是所谓的暂时性死区)

​ 3.初始化代码

​ 4.在修改变量值的前提下,进行赋值

这就是为什么输出的结果为:无法在初始化之前访问 ' a '

错误2.使用let声明变量无法声明重复变量,所以抛出错误

有些同学看到暂时性死区会很懵逼的说,那是啥玩意儿?如然后各种度娘,其实你可以简单的认为:在变量初始化之前,是无法使用这个变量的

3.通过const声明的常量

const a = 123;
console.log(a);
a = 321;//抛出错误 Uncaught TypeError: Assignment to constant variable.

输出的结果为:重新赋值了常量。也就是是你重新修改了const声明的常量的值

const 和 let只有一个区别,那就是 const 声明常量的过程只有两步:

创建和初始化,但没有赋值过程

因为没有赋值过程,所以无法给const声明的常量进行重新赋值,这就是为什么重新给常量赋值后会抛出错误的原因

const声明的常量是什么?常量,顾名思义就是常用的变量,在判断逻辑的情况下,我们有时候需要一个固定值来作为判断条件,那么我们就会优先使用const进行声明常量,而const声明的常量移除了这个量的修改功能,也就是说 const声明的量只无法修改其值,故称为常量。

4.const 和 let 具有块级作用域

{
   var a = 'xu1';
   let b = 'xu2';
   const c = 'xu3';
}
	console.log(a); //输出结果 xu1
	console.log(b); //抛出错误 ReferenceError: b is not defined
	console.log(c); //抛出错误 ReferenceError: c is not defined

由此可见,const 和 let 声明的常量/变量只限于当前作用域,在外部作用域是无法访问到的,那么另一个问题就来了,它们两者声明的常量/变量是否属于window呢?

let a = 'xu1'
const b = 'xu2'
var c = 'xu3'
console.log(window.a)//undefined
console.log(window.b)//undefined
console.log(window.c)//xu3

是否看完结果后,又发现了一项它们之间的区别,在全局作用域中使用var或者不使用var声明的变量都是属于window的,而let和const不是

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值