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>