欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

6.3、ES6变量声明 let 和常量const

程序员文章站 2022-07-16 21:15:33
...

一、var声明的问题

// var声明的问题
// 1.存在变量声明
// 2.挂载到window上
// 3.可以声明多次
// 4.只有全局作用域和函数作用于

console.log(a) //undefined  变量提升问题
var a = 10

二、let声明的问题

     // let声明的问题
        // 1. 不存在变量声明 而存在暂时性死区
        // 2.不可以声明多次
        // 3.除了全局作用域和函数作用域,还有{}(代码段的域)
        // 4.没有挂在到window上
        
   // console.log(b) //报错  暂时性死区  b is not defined
  // let b = 10

      // 不可以声明多次
        // let c = 10
        // let c = 20
        // console.log(c) //报错 不可以声明多次

        console.log(window.b) //报错  暂时性死区  
        let b = 10
        
       // // 不可以声明多次
        // let c = 10
        // var c=10
        // let c = 20
        // console.log(c) //报错 不可以声明多次

  // let b = 10
  // console.log(window.b) //undefined 不挂在到window上
  
       if (true) {
            // let a = 10
            var a = 10
        }
        // console.log(a) // let 声明会报错
        console.log(a) // var 10

        let a = 10; //全局的
        (function() {
            console.log(a) //10 
            a = 5 //改写全局的域
            console.log(window.a) //undefined
            console.log(a) //5 
        })()

       for (let i = 0; i < 3; i++) {
       ////for本身是一个父的域  for里面{}又是一个域
            let i = 10
            console.log(i) // 3 个 10
        }
        console.log(i) //()中var声明的 3
        console.log(i) //()let中声明的 报错()中let声明不是全局的



    <ul>
        <li>11111111111</li>
        <li>11111111111</li>
        <li>11111111111</li>
        <li>11111111111</li>
        <li>11111111111</li>
    </ul>
    <script>
        var oli = document.getElementsByTagName('li')
            // for (var i = 0; i < oli.length; i++) {
            //     oli[i].onclick = function() {
            //         console.log(i) //点那个都是5
            //     }
            // }

        // // 方法一
        // for (var i = 0; i < oli.length; i++) {
        //     oli[i].index = i
        //     oli[i].onclick = function() {
        //         console.log(this.index) //利用自定义属性
        //     }
        // }

        // // 方法二
        // for (var i = 0; i < oli.length; i++) {
        //     oli[i].onclick = (function(i) {
        //         return function() {
        //             console.log(i)
        //         }
        //     })(i)
        // }

        // 方法三
        for (let i = 0; i < oli.length; i++) { //for 循环每走一次就会将i存一次
            oli[i].onclick = function() {
                console.log(i) //利用自定义属性
            }
        }


const 声明

// const 声明一个常量  同let
// 声明必须赋值
// 声明之后不可以更改
// 如果声明的是引用类型可以修改其属性,但不可以修改其引用
const a = 10;
a = 5
var a = 6
console.log(a) //报错

const c;
c = 10
console.log(c) //报错  声明必须赋值
   // const arr = [];
        // arr.push('张三')
        // console.log(arr) //["张三"]
        //     // 不可修改器引用
        // arr = '123' //报错


       var obj = {
                name: '张三'
            }
            // obj = '李四' //报错
        obj.name = '李四' //可以
        console.log(obj) //{name: "李四"}