var定义的变量,没有块的概念,可以跨块访问, 不能跨函数访问。
let定义的变量,只能在块作用域里访问,不能跨块访问,也不能跨函数访问。
const用来定义常量,使用时必须初始化(即必须赋值),只能在块作用域里访问,而且不能修改。
let是更完美的var
let声明的变量拥有块级作用域。 也就是说用let声明的变量的作用域只是外层块,而不是整个外层函数。
//var和let的区别
// 1、let声明的变量不存在预解析
// console.log(flag) // undefined(未定义)
// var flag = 123
// console.log(flag) // 报错(let声明的变量是不会预加载)
// let flag = 123
// 2、let声明的变量不允许重复(在同一作用域中),var声明的变量名如果重复,后者会覆盖前者
// let flag = 123
// let flag = 456
// console.log(flag) // 报错
// 3、ES6新引入块级作用域在块级作用域内var声明的变量能被外部访问到,let声明的变量外部访问不到(如果非得访问程序会报错)
// if (true){
// var num = 123
// let num1 = 456
// }
// console.log(num) // 123
// console.log(num1) // 报错
/* const声明常量
1、const声明常量的值是不允许改变的
2、const声明的常量必须初始化
*/