2-15、var、let和const有什么区别

84 阅读1分钟

var、let和const的区别

  1. 块级作用域
  2. 变量提升
  3. 重名
<script>
    /**
     * ----------------------------------
     *  var 没有块级作用域
     *  let const 有块级作用域
     * ----------------------------------
     */

    //  console.log()出来的结果为0,1,2,3,4,5
    // for (var i = 0; i < 5; i++) {
    //     console.log(i);
    // }
    // console.log(i);

    // 输出结果为5
    // if (true) {
    //     var i = 5;
    // }
    // console.log(i);

    // 会报错;i is not defined
    // if (true) {
    //     const或者let i = 5;
    //     console.log(i); 在作用域里可以执行
    // }
    // console.log(i);

    /**
     * ----------------------------------
     *  var 有变量提升
     *  let const 没有变量提升
     *  暂时性死区(temporal dead zone - TDZ)
     * ----------------------------------
     */
    // // var a; 
    // console.log(a);
    // // var a = 10;
    // console.log(a);
    // const a = 10;

    /**
    * ----------------------------------
    *  var 可以重名
    *  let const 不能重名
    * ----------------------------------
    */

    // 输出结果为10
    // var a = 5;
    // var a = 10;
    // console.log(a);

    // 报错 Identifier 'a' has already been declared
    // let a = 5;
    // let a = 10;
    // console.log(a);

    // 报错 Identifier 'a' has already been declared
    // var a = 5;
    // let a = 10;
    // console.log(a);

    /**
    * ----------------------------------
    *  测试题
    * ----------------------------------
    */

    // 题目1
    // // 结果为10
    // function fn() {
    //     let a = 10;
    //     if (true) {
    //         let a = 5;
    //     }
    //     console.log(a);
    // }
    // fn();

    // 题目2
    // // 结果为报错
    // var a = 5;
    // if (true) {
    //     a = 200;
    //     let a = 10;
    // }
    // console.log(a);

    // 题目3
    // // 结果为5
    // var a = 5;
    // if (true) {
    //     let a = 10;
    // }
    // console.log(a);

    // 题目4
    // // 结果为undefined
    // function fn() {
    //     console.log(a);
    //     var a = 10;
    // }
    // var a = 5;
    // fn();
</script>