猿问

这段js循环代码addEventListener为什么会错误?

// 这个代码是错误的,因为变量i从来就没被locked住

// 相反,当循环执行以后,我们在点击的时候i才获得数值

// 因为这个时候i操真正获得值

// 所以说无论点击那个连接,最终显示的都是I am link #10(如果有10个a元素的话)


var elems = document.getElementsByTagName('a');


for (var i = 0; i < elems.length; i++) {


    elems[i].addEventListener('click', function (e) {

        e.preventDefault();

        alert('I am link #' + i);

    }, 'false');


};

它为什么没有在点击第i个链接时,显示I am link #i


慕莱坞森
浏览 656回答 3
3回答

幕布斯6054654

刚好我也在解决闭包问题var ps=document.getElementsByTagName("p");for (var i = 0; i < ps.length; i++) {ps[i].addEventListener("click",(function(num){&nbsp; &nbsp; return function(){&nbsp; &nbsp; &nbsp; &nbsp;alert(num);&nbsp; &nbsp; };})(num));}刚测试出来的。

元芳怎么了

把for循环中的var改成let
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答