var、let、const的区别

2021/12/15 23:42:40

本文主要是介绍var、let、const的区别,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

var、let、const的区别

大体区别:

const定义的变量不可以修改,而且必须初始化。

var定义的变量可以修改,如果不初始化会输出undefined,不会报错,var定义的变量没有块的概念,可以跨酷爱访问,不能跨函数访问。

let是块级作用域,函数内部使用let定义后,对函数外部无影响,let的定义只能在块作用域里访问,使用的时候必须初始化,必须赋值,只能在块作用域里访问,而且不能修改。

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声明变量无法声明重复变量,所以抛出错误

let声明的作用域内,是无法再次声明同一个变量的,否则就会抛出错误

{
    let xu1 = '1';
    let xu1 = '1'; //抛出错误 Uncaught SyntaxError: Identifier 'xu1' has already been declared
}

抛出的错误说明xu1已经被声明,无法重复声明的意思。

3.通过const声明的常量

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

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

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

1.创建和初始化
2.赋值过程被阻止
因为阻止赋值过程,所以无法给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不是

SE6针对变量的全局污染,变量冗余,声明混乱的情况下,在var的基础上改变出了声明变量的的另外2种方式,可以根据不同的逻辑代码块中使用不同的声明方式,在声明作用域内私有变量时,可以通过let来声明变量,在需要一个不会变更标识时,可以通过const来声明常量,在某个代码块中,需要用到这个变量时,可以通过var来声明变量,这样全局都可以访问到。

完结~



这篇关于var、let、const的区别的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程