var和let,const区别总结

var和let,const区别

文章目录

var和let,const区别

一.var

1.var属于ES5规范

2.预解析

3.声明提升

4 作用域

5.挂载对象

二.let

1.let属于ES6规范

2.let只在块级作用域有效

3.let声明变量不会提升

4.不能通过let声明和形参相同的变量

5.暂时性死区

6.let声明全局变量

三.const

1.属于ES6规范

2.声明只读常量

3.必须初始化

4.const本质

一.var

1.var属于ES5规范

2.预解析

var有预解析阶段,会被js解析器扫描,然后放进仓库,等待逐行代码的执行,此时var声明的变量初始值是undefined

3.声明提升

var会存在声明提升,当js解析器扫描到var关键字后,会将var声明的变量放进当前作用域的顶部

4 作用域

全局作用域或者函数作用域.

5.挂载对象

var 声明的全局变量会挂载到window对象上

二.let

1.let属于ES6规范

2.let只在块级作用域有效

一般一个大括号就是一个块

for(vari=0;i<10;i++){console.log(i);};alert(i);for(letv=0;v<10;v++){console.log(v);}alert(v);if(true)leta=20;//会报错if(true){leta=20;//不会报错}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

3.let声明变量不会提升

let声明的变量一定要在声明之后使用,否则报错。

alert(a);vara=2;alert(b);letb=2;//注意:let声明的变量一定要在声明之后使用,否则报错。

1

2

3

4

5

6

4.不能通过let声明和形参相同的变量

functiontest(a){leta=123;console.log(a);}test(456);

1

2

3

4

5

5.暂时性死区

ES6 明确规定,如果区块中存在let和const命令,这个区块对这些命令声明的变量,从一开始就形成了封闭作用域。凡是在声明之前就使用这些变量,就会报错。总之,在代码块内,使用let命令声明变量之前,该变量都是不可用的。这在语法上,称为“暂时性死区”(temporal dead zone,简称 TDZ)。

在暂时性死区中使用let或const声明的变量,会报错

6.let声明全局变量

let声明的全局变量,不会成为window的属性,并没有挂载到window对象上

三.const

1.属于ES6规范

2.声明只读常量

const常量一旦声明,常量将不能重新赋值!

3.必须初始化

const一旦声明,就必须立即初始化,不能留到以后赋值!

4.const本质

const实际上保证的,并不是值不能改变,而是指向的那个内存地址不能改变

你可能感兴趣的:(var和let,const区别总结)