var:用var
声明的变量是函数作用域内的,且在变量声明之前使用时得到的是undefined;
let:用let
作用域声明的变量是块级而不是函数级的,意味着使用let
关键字创建的变量在创建它的“块”内以及任何嵌套块中都可用,块作用域由{ }包括,只在块级作用域里有效,if,else语句和for,while语句里面的{ }也属于块作用域;不存在变量提升(在变量声明之前使用let时会报引用错误);不能重复声明,不影响作用域链;
const:const
与let
几乎完全相同,唯一的区别是一旦使用const
为变量赋值,就无法将其重新赋值给新值(const用于定义常量,且一般常量使用大写);const一定要赋初值;
建议:除非变量会发生变化,否则应该总是使用const
;如果变量需要更改(比如在for
循环中),应该使用let
,尽量不使用var
;