声明变量——课堂随笔

发布时间 2023-07-03 09:28:57作者: miriz
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

</body>
</html>
<script>
    /*  //作用域:传统js只有两个作用域,1是全局,2是局部(函数内)
      console.log(a) //undefined
      var a  //var声明变量存在变量提升,在这里声明的变量,在整个作用域,都存在
      console.log(a)//undefined
      a=1
      console.log(a)//1
      // console.log(b)*/

    /*  var a, b = 2  //a===undefined
      var a, b
      b = 2*/
    /*var name, b = '2'
    console.log(name)
    console.log(typeof name)
    console.log(typeof b)

    console.log(window)*/
    // console.log(name)
    // name=2
    // var window = {
    //     name: 'a',
    //     b: '2'
    // }

    /*
        console.log(a) //error  let没有变量提升
        let a
        console.log(a) //
        a=1
        console.log(a)//
    */

    /*   var a=1
       var a=2
       console.log(a)

       let b=1
       let b=2
       console.log(b) //let 不允许重复声明*/

    /*  var a = 1
      function add() {
          a++
          console.log(a) //2
      }
      add()
      console.log(a) //2*/

    /*   function add() {
           var a = 1
           a++
           console.log(a) //2
       }
       add()
       console.log(a) //error*/

    /* var a=3
     function add() {
         a = 1
         a++
         console.log(a) //2
     }
     add()
     console.log(a) //2*/

    /*  var a=3
      function add() {
         var a = 1
          a++
          console.log(a) //2
      }
      add()
      console.log(a)//3*/

 /*   a = 3
    function add() {
        a++
        console.log(a) //
        var a
        a = 1
        console.log(a) //1
    }

    add()
    console.log(a)//
    */
    /*a = 3
    function add() {
        a++
        console.log(a) //
        let a
        a = 1
        console.log(a) //1
    }

    add()
    console.log(a)//*/

    /*const a=1
    a=2  //const 声明常量,不可被修改*/

    const a=[1,2,3,4,5,6,7,8]
    // a[0]='a'
    // console.log(a)
    const b=[1,2,3,4,5,6,7,8]
    console.log(a===b)

    const c=a
    a[0]='dsafj,nmbm,jk;dsfaklj'
    console.log(c)
    console.log(a===c)

    const d=[]
    for (let i = 0; i < b.length; i++) {
        d[i]=b[i]
    }
    console.log(d,b===d)

    /********************总结**************************************/
    //  var 可以重复声明,存在变量提升,只有两个作用域,全局和局部(函数内),会将声明的变量挂载到window对象上,会引发一系列不可思议的错误,比如var name=1;
    //局部作用域内,如果没有某变量,则默认会去找外层作用域查找,如果自己这个局部作用域内,如果有let或var或const声明了此变量,则会暂时性死区,会锁定本作用域,不去外面找


</script>