老师,为什么btn.innerText=i不会都变成11?

老师,为什么btn.innerText=i不会都变成11?

如果这样写:

var i=0;

for(i=1;i<=10;i++){

var btn=document.createElement('button');

btn.innerText=i;

btn.onclick=function(){

alert(i);

};

document.body.appendChild(btn);

}

为什么btn.innerText=i不会都变成11?而alert(i)就都变成11了?


正在回答

登陆购买课程后可参与讨论,去登陆

2回答

同学你好,btn.innerText = i;是直接在循环中进行的,所以i是循环中的值,依次为1-10。

而alert(i);是在绑定的单击事件中的。而点击事件是先绑定后触发,就是绑定的时候i还是1-10,但是单击事件是绑定完才触发的,所以这个时候的i是循环完了之后的值,是11。

希望能帮助到你,欢迎采纳。

祝学习愉快!

  • 小章鱼丸 提问者 #1
    就是for循环只执行到btn.onclick=function(){}这个函数的外层,就是绑定过程,而函数内部的alert(i)相当于触发的事件?所以不会被依次循环?
    2019-01-30 10:14:02
好帮手慕糖 2019-01-30 10:25:27

你好,是的哦,alert(i)是触发事件才会执行的,这个时候循环已经执行完了。

希望能帮助到你,祝学习愉快!

问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
热门框架Vue开发WebApp 18版
  • 参与学习           人
  • 提交作业       209    份
  • 解答问题       3299    个

本路径是通过ES6基础知识、运用Zepto、Swiper、fullPag等移动端常用工具包、以及当下流行框架Vue,结合多个实战案例,还原真实开发场景,最终实现手机端购物商城网页开发。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师