2019-05-13 es6 let解决异步事件的原理

2019-05-13  本文已影响0人  DreamNeverDie

es6 let 与var相比区别是,let在每一个for的每一个循环下都创建一个独立的i,如下列

 <!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>
</head>
<body>
    <script>
            window.onload=function(){
                var aBtn=document.getElementsByTagName('input')
                 for(let i=0;i<aBtn.length;i++){
                    aBtn[i].onclick=function(){
                        alert(i)
                    }            
            }
            
    </script>
<input type="button"  value="a"/>
<input type="button"  value="b"/>
<input type="button"  value="c"/>
</body>
</html>

等价于如下,这里使用了包装函数,就可以让每次循环都有一个独立的i

 <!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>
</head>
<body>
    <script>
            window.onload=function(){
                var aBtn=document.getElementsByTagName('input')

                for(var i=0;i<aBtn.length;i++){
                    (function(i){
                        aBtn[i].onclick=function(){
                        alert(i)
                    }
                    })(i)
                }
            }
            
    </script>
<input type="button"  value="a"/>
<input type="button"  value="b"/>
<input type="button"  value="c"/>
</body>
</html>
上一篇下一篇

猜你喜欢

热点阅读