zoukankan      html  css  js  c++  java
  • 石川es6课程---3、变量let和常量const

    石川es6课程---3、变量let和常量const

    一、总结

    一句话总结:

    let非常好用,尤其是let的块级作用域可以解决之前要(function(){})()立刻执行函数做的块级作用域

    1、js中var声明变量会伴随哪些问题?

    - 可以重复声明,没有报错和警告
    - 无法限制修改(也就是没有常量的概念)
    - 没有块级作用域, { }

    2、js中如何实现块级作用域?

    函数:普通js只有函数才有作用域(function(){})()立刻执行函数
    //普通js只有函数才有作用域(function(){})()立刻执行函数
    // for(var i=0;i<aBtn.length;i++){
    //     (function(i){
    //         aBtn[i].onclick=function(){alert(i)}
    //     })(i)
    // }

    3、let 和 const的优点?

    · 不能重复声明
    · 都是块级作用域, { } 块内声明的,块外无效
    · let 是变量,可以修改,const 是常量,不能修改

    4、let块级作用域应用举例?

    + 本来需要(function(){})()立刻执行函数做块级作用域的地方的应用可以轻松被let代替
    + 直接 var 改 let,解决作用域问题
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>Document</title>
        <script>
            window.onload= function () {
                /*
                var aBtn = document.getElementsByTagName('input')
                for (var i=0; i < aBtn.length; i++) {
                    aBtn[i].onclick = function () {
                        alert(i)
                    }
                }*/
                var aBtn = document.getElementsByTagName('input')
                for (let i = 0; i < aBtn.length; i++) {
                    aBtn[i].onclick = function () {
                        alert(i)
                    }
                }
                /*
                var aBtn = document.getElementsByTagName('input')
                for (var i = 0; i < aBtn.length; i++) {
                    // 封装到函数里,限制作用域
                    (function (i) {
                        aBtn[i].onclick = function () {
                            alert(i)
                        }
                    })(i)
                }*/
            }
        </script>
    </head>
    <body>
        <input type="button" value="按钮1">
        <input type="button" value="按钮2">
        <input type="button" value="按钮3">
    </body>
    </html>

    二、变量let和常量const

     - var 的问题
    - 可以重复声明,没有报错和警告
    - 无法限制修改
    - 没有块级作用域, `{ }`

    - let 和 const
    - 不能重复声明
    - 都是块级作用域, `{ }` 块内声明的,块外无效
    - let 是变量,可以修改
    - const 是常量,不能修改

    - 块级作用域举例
    - 原来用 var 的方式,结果弹出的都是 3
    - 或者将变量 封装到函数里,限制作用域,但比较麻烦
    - 用 let 最简单,直接 var 改 let,解决作用域问题

    let做块级作用于应用

     1 <!DOCTYPE html>
     2 <html lang="en">
     3 <head>
     4     <meta charset="UTF-8">
     5     <meta name="viewport" content="width=device-width, initial-scale=1.0">
     6     <meta http-equiv="X-UA-Compatible" content="ie=edge">
     7     <title>Document</title>
     8     <script>
     9         window.onload= function () {
    10             /*
    11             var aBtn = document.getElementsByTagName('input')
    12             for (var i=0; i < aBtn.length; i++) {
    13                 aBtn[i].onclick = function () {
    14                     alert(i)
    15                 }
    16             }*/
    17             var aBtn = document.getElementsByTagName('input')
    18             for (let i = 0; i < aBtn.length; i++) {
    19                 aBtn[i].onclick = function () {
    20                     alert(i)
    21                 }
    22             }
    23             /*
    24             var aBtn = document.getElementsByTagName('input')
    25             for (var i = 0; i < aBtn.length; i++) {
    26                 // 封装到函数里,限制作用域
    27                 (function (i) {
    28                     aBtn[i].onclick = function () {
    29                         alert(i)
    30                     }
    31                 })(i)
    32             }*/
    33         }
    34     </script>
    35 </head>
    36 <body>
    37     <input type="button" value="按钮1">
    38     <input type="button" value="按钮2">
    39     <input type="button" value="按钮3">
    40 </body>
    41 </html>

     普通js只有函数才有作用域(function(){})()立刻执行函数

    块级作用域

     1 <!DOCTYPE html>
     2 <html lang="en">
     3 <head>
     4     <meta charset="UTF-8">
     5     <meta name="viewport" content="width=device-width, initial-scale=1.0">
     6     <meta http-equiv="X-UA-Compatible" content="ie=edge">
     7     <title>块级作用域</title>
     8 </head>
     9 <body>
    10     <script>
    11         {
    12             var a=12
    13             let b=13
    14             b=16
    15             const c=16
    16             // c=18//报错Uncaught TypeError: Assignment to constant variable.
    17             // const c=17//块级作用域内 
    18             //报错Uncaught SyntaxError: Identifier 'c' has already been declared
    19         }
    20         let b=13
    21         const c=19
    22         alert(a)//正常
    23         alert(b)//报错a is not defined
    24         alert(c)
    25         // let a=19//块级作用域外 
    26         //报错Uncaught SyntaxError: Identifier 'a' has already been declared
    27     </script>
    28 </body>
    29 </html>
     
  • 相关阅读:
    安卓开发_浅谈TimePicker(时间选择器)
    eclipse显示代码行数
    Java数据解析---JSON
    Java数据解析---PULL
    Java数据解析---SAX
    统计机器学习(目录)
    FP Tree算法原理总结
    梯度下降(Gradient Descent)小结
    用scikit-learn和pandas学习线性回归
    用scikit-learn学习BIRCH聚类
  • 原文地址:https://www.cnblogs.com/Renyi-Fan/p/11589900.html
Copyright © 2011-2022 走看看