概念
    es6中用来定义数据类型关键字

    es6概念暂时性死区概念

    1. let a = 100;
    2. function test(){
    3. console.log(a);
    4. let a = 1;
    5. }
    6. test()

    image.png
    前世今生
    早期javascript中es3 、es5定义变量使用var关键字来定义 到了es6的出现 对于var定义数据类型 做了不错的改动 越来越靠近后端java php 语法

    es5语法

    1. var name = 'hello word'
    2. var fn = () => {//coder}
    3. var obj = {
    4. id:1
    5. }

    es6语法

    1. let f1 = 1;
    2. let f2 = () => {}
    3. let f3 = {}
    4. const COUNT = 10;
    5. const TYPE = 'GF';

    var let cont 三者直接的区别

    • 变量提成
    • 不能重复声明
    • 代码块作用域

    变量提升

    es5

    1. //先打印 在定义
    2. console.log(tag)
    3. var tag;
    4. undefined

    es6

    1. //先打印 在定义
    2. console.log(tag2)
    3. let tag2 = 11;
    4. VM941:1 Uncaught ReferenceError: Cannot access 'tag2' before initialization
    5. at <anonymous>:1:13
    6. //先定义 在打印
    7. let tag3 = 1000
    8. undefined
    9. tag3
    10. 1000

    不能重复声明

    es5

    1. var name = "hello"
    2. undefined
    3. var name = "word"
    4. undefined


    es6

    1. let a = 11;
    2. let a = 12;
    3. //报错
    4. VM1150:2 Uncaught SyntaxError: Identifier 'a' has already been declared


    代码块作用域

    es5

    1. for(var i = 0; i < 10; i++){
    2. //
    3. }
    4. console.log(i)
    5. //可以在外面直接访问到i变量
    6. 10

    es6

    1. for(let j = 0; j < 100; j++ ){
    2. //
    3. }
    4. console.log(j)
    5. //访问不到i变量
    6. VM1421:4 Uncaught ReferenceError: j is not defined
    7. at <anonymous>:4:13

    总结

    • 使用var存在变量提升 let cont不存在
    • 使用var可以重复声明变量 let cont不能重复声明定义
    • 使用 var{}代码块无效 使用let cont {}代码块有效 函数除外