美文网首页
【js】--- let 和 var 的区别问题(典型案例)

【js】--- let 和 var 的区别问题(典型案例)

作者: 愫幕 | 来源:发表于2019-05-03 10:14 被阅读0次
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    <!-- 在页面添加三个按钮 -->
    <input type="button" value="1">
    <input type="button" value="2">
    <input type="button" value="3">


    <script>
        // 获取页面所有的input
        var aBtn = document.getElementsByTagName('input');

        // 循环绑定点击事件,当然毫无疑问这里点击之后会弹出3,
        //因为我们知道js是单线程的,当基本逻辑语句执行完之后,才会执行点击事件
        //而当你触发点击事件的时候,for循环都已经跑完了,所以i已经变成了3;
        for(var i = 0; i < aBtn.length; i++){
            aBtn[i].onclick = function(){ 
                alert(i);
            }
        }

        // 解决方法1:也是最简单的方法,就是将for循环的var变成let
        //这样当点击每个按钮的时候,就会依次弹出0,1,2;
        //let是ES6新增的一个变量声明方式,拥有块级作用域;
        for(let i = 0; i < aBtn.length; i++){
            aBtn[i].onclick = function(){ 
                alert(i);
            }
        }

        //解决方法2:利用闭包(说是闭包,貌似也不完全是),也就是函数作用域访问原则的特性
        //函数内部可以访问外部的变量,外部却访问不了里边的;
        for(var i = 0; i < aBtn.length; i++){
            (function(i){
                aBtn[i].onclick = function(){ 
                    alert(i);
                }
            })(i);
        }
    </script>
</body>
</html>

当然,这里也不仅仅局限于点击事件,也可以换成setTimeout等也有相同的问题,可以用这两种方法来解决;

相关文章

  • 【js】--- let 和 var 的区别问题(典型案例)

    当然,这里也不仅仅局限于点击事件,也可以换成setTimeout等也有相同的问题,可以用这两种方法来解决;

  • 前端面试题整理

    针对js的问题 let 和 var的区别是什么var声明的变量都是全局变量,不存在局部变量,有变量提升;let可以...

  • var、let 和 const 区别的实现原理是什么

    问题 var、let 和 const 区别的实现原理是什么? 区别 首先先说下三者的区别 var与let是可以声明...

  • js ------ let 和 var 的区别

    let 和 var 的区别

  • js 2022经典面试题汇总

    1.JS数据类型有哪些 2.var、let、const区别 var存在变量提升,而let、const没有 let、...

  • 2018-06-25

    一、let命令 es是标准,js是实现let和var的区别:let只存在所在的作用域中 二、const命令 常量命...

  • 关于ES6的let命令

    1、let的基本用法以及let和var的区别 (1) let与var一样是用来声明变量的,与var的区别是let所...

  • js问题

    js中let和var定义变量的区别,主要体现在作用于的不同。 var定义的变量是全局变量或者函数变量。 let定义...

  • js 中let 和 var 的区别

    首先我们看一个例子 请问这段代码输出是什么~? 把var换成let呢? 为什么会出现这种情况呢,接下来我们看完le...

  • JS中let和var的区别

    前言 ES6 新增了let命令,用来声明局部变量。它的用法类似于var,但是所声明的变量,只在let命令所在的代码...

网友评论

      本文标题:【js】--- let 和 var 的区别问题(典型案例)

      本文链接:https://www.haomeiwen.com/subject/akeanqtx.html