概念
es6中用来定义数据类型关键字
es6概念暂时性死区概念
let a = 100;function test(){console.log(a);let a = 1;}test()

前世今生
早期javascript中es3 、es5定义变量使用var关键字来定义 到了es6的出现 对于var定义数据类型 做了不错的改动 越来越靠近后端java php 语法
es5语法
var name = 'hello word'var fn = () => {//coder}var obj = {id:1}
es6语法
let f1 = 1;let f2 = () => {}let f3 = {}const COUNT = 10;const TYPE = 'GF';
var let cont 三者直接的区别
- 变量提成
- 不能重复声明
- 代码块作用域
变量提升
es5
//先打印 在定义console.log(tag)var tag;undefined
es6
//先打印 在定义console.log(tag2)let tag2 = 11;VM941:1 Uncaught ReferenceError: Cannot access 'tag2' before initializationat <anonymous>:1:13//先定义 在打印let tag3 = 1000undefinedtag31000
不能重复声明
es5
var name = "hello"undefinedvar name = "word"undefined
es6
let a = 11;let a = 12;//报错VM1150:2 Uncaught SyntaxError: Identifier 'a' has already been declared
代码块作用域
es5
for(var i = 0; i < 10; i++){//}console.log(i)//可以在外面直接访问到i变量10
es6
for(let j = 0; j < 100; j++ ){//}console.log(j)//访问不到i变量VM1421:4 Uncaught ReferenceError: j is not definedat <anonymous>:4:13
总结
- 使用var存在变量提升 let cont不存在
- 使用var可以重复声明变量 let cont不能重复声明定义
- 使用 var{}代码块无效 使用let cont {}代码块有效
函数除外
