在ES6之前,只有var来声明变量
var a = '1'
解释下上面变量的解析过程:var a(命名) | var a = undefined(初始化) | var = '1'(赋值)
如果变量在未初始化前使用,由于变量提升的原因,将会返回undefined,如下if(true){ console.log(a) //先使用 var a = 'hello world' //后赋值 }由于变量提升的特点,上面函数等同于
if(true){ var a; //声明并初始化,此时为 undefined console.log(a) //此时打印出来的值,undefined a = 'hello world' //赋值 }在ES6之后,增加了let、const来声明变量,声明块级作用域,而这样声明的变量必须先声明,后使用(其实,跟java这种强类型语言、先声明、后使用的原理是一样的)
let a = '1'
let、const声明的变量为块级作用域。如果在未初始化之前使用,就是抛出ReferenceError,因为let/const没有变量提升这么一说。console.log(a) //ReferenceError let a = '1'正确使用方法,如下
let a = '1' //先声明 console.log(a) //后使用