异步问题 => 循环绑定事件

前言:

  浏览器是多线程的

  js 是单线程

  • js 中所有的事件绑定都是异步编程(绑定的时候并没有执行)
  • 同步:js 中当前这个任务没有完成,下面的任务都不会执行,只有当前任务彻底完成才会执行下面的任务
  • 异步:js 中当前任务没有完成,需要等一会在完成,此时我们可以继续执行下面的任务

(一)demo 代码

  此代码的我们想要的预期是 点击不同的弹出不同的结果

  但是此代码运行结果为五个按钮都是一样的结果

<div id = "btnBox">
    <input type = "button" value = "button_1"></input>
    <input type = "button" value = "button_2"></input>
    <input type = "button" value = "button_3"></input>
    <input type = "button" value = "button_4"></input>
    <input type = "button" value = "button_5"></input>
</div>

<script type="text/javascript">

    var btnBox = document.getElementById('btnBox');

    var input = btnBox.getElementsByTagName('input')

    for(var i = 0 ; i < 5 ; i++){
        input[i].onclick = () => {
            alert(i)
        }
    }
</script>

运行结果 五个按钮弹出的都一样


(二)解决方法

  1 let 块级作用域 解决

         

  2 闭包解决

         

         


(三) 匿名函数自执行的写法

  • a = function(){}()
  • ~function(){}()                         //个人喜好的方式
  • !function(){}()
  • +function(){}()
  • void function(){}()
  • 当然如果你不喜欢以上方式

    (function(){})()
    也是可行的


    坚持或亦如此

原文地址:https://www.cnblogs.com/misscai/p/14425734.html