JS是弱类型语言;
一、var
var声明变量时,存在变量提升行为(将变量提升到当前作用域的顶部)。即变量可以在声明之前调用,值为undefined。并且可以重复声明,重复声明时如果赋值,其值会被刷新;不赋值,值还为之前的值(同一作用域内);二、let,const
let,const声明变量时,会生成块级作用域,不会进行变量提升,用其声明变量后,使用变量将只会在此块作用域里寻找该变量。const声明变量时必须赋值,并且值不能更改。(声明引用类型除外);
var不存在块级作用域。let和const存在块级作用域。