zoukankan      html  css  js  c++  java
  • let/var之块级作用域

    一、ES5中的var

    <body>
    <button>按钮1</button> <button>按钮2</button> <button>按钮3</button> <script> var btns = document.getElementsByTagName('button') for(var i = 0;i < btns.length;i ++){ btns[i].addEventListener('click',function(){ console,log('第' + i + '个按钮被点击') }) }
    </script>

    </body>

    无论点击哪个按钮,都是第三个按钮被点击

    原因:var不存在块级作用域,比如for和if

    解决方法:设置闭包

    <body>
      <button>按钮1</button>
      <button>按钮2</button>
      <button>按钮3</button>
    <script>
        var btns = document.getElementsByTagName('button');
        for(var i = 0;i < btns.length;i ++){
          (function (i) {
            btns[i].addEventListener('click',function() {
              console. log('第' + i + '个按钮被点击');
            })
          })(i)
        }
    </script>
    </body>

    为什么可以解决:因为在JavaScript中函数有作用域

    二、ES6中的let

    <body>
      <button>按钮1</button>
      <button>按钮2</button>
      <button>按钮3</button>
    <script>
        const btns = document.getElementsByTagName('button');
        for(let i = 0;i < btns.length;i ++){
            btns[i].addEventListener('click',function() {
              console. log('第' + i + '个按钮被点击');
            })
        }
    </script>
    </body>

    执行结果正确

    ES6引入了let有了自己的作用域,如if、for

    不将var修改的原因:防止浏览器不兼容以及开发者不适应

     

  • 相关阅读:
    数字精确运算BigDecimal经常用法
    C3P0数据库连接池使用
    Theano学习笔记(四)——导数
    Leetcode--Merge Intervals
    1191 数轴染色
    P1021 邮票面值设计
    P1032 字串变换
    P1294 高手去散步
    P1832 A+B Problem(再升级)
    P1332 血色先锋队
  • 原文地址:https://www.cnblogs.com/hw1988/p/13262893.html
Copyright © 2011-2022 走看看