一、var和let的异同点
1、全局变量:是指在函数外声明的变量(全局变量在JavaScript程序的任何地方都可以访问),在函数体外或代码块外使用var和let关键字声明的变量它们的作用域都是全局的。2、局部变量:是指在函数内声明的变量(函数内使用var声明的变量只能在函数内访问,如果不使用var则代表是全局变量),在函数体内使用var和let关键字声明的变量它们的作用域都是局部的 。
因此,var与let关键字既可以用来声明全局变量,也可以用来声明局部变量。
但是,在JavaScript中,全局作用域针对JavaScript环境;
在HTML中,全局作用域则针对window对象。
使用var关键字声明的全局变量属于window对象;
使用let关键字声明的全局变量不属于window对象 。

3、关于var、let关键字的重置变量
① 使用var关键字声明的变量在任何地方都可以修改;
② 在相同的作用域或块级作用域中,不能用let关键字重置var关键字的变量;
不能用let关键字重置let关键字的变量;
不能用var关键字重置let关键字的变量。
③ let关键字在不同作用域或不同块级作用域中,是可以重新声明赋值的。
4、变量提升
var关键字定义的变量可以先使用后声明
let关键字定义的变量必须先声明才能使用
5、循环作用域

使用var关键字声明的变量是全局的,包括循环体内和体外的;
使用let关键字声明的变量,作用域只在循环体内,而不影响循环体外。
二、var、let、const的区别
1、var声明的变量不具备块级作用域的特性,在{ }之外依然可以访问到;

2、let声明的变量只在let命令所在的代码块{ }内有效,在{ }之外不能访问;

3、const用于声明一个或多个常量,一旦声明,常量的值就不能改变,且必须初始化。
4、let和const的相同点
① 二者都是块级作用域;
② 都不能和它所在的作用域内的其他变量或函数名称相同
5、let和const的不同点
① const声明的常量必须初始化,而let不需要;
② const声明的常量不能重新赋值,也不能再次声明,而let可以
6、const定义的常量并非不可变,使用const定义的数组或者对象,其实是可以变得

但是我们不能对常量对象重新赋值
