选项1选项2选项3选项4选项5选项6li{border:1pxsolid;}varitems=document.querySelectorAll("li");for(vari=0;i
2 回答

慕娘9325324
TA贡献1783条经验 获得超4个赞
这个涉及到js作用域以及js的运行机制。你把这些基础知识弄明白了,就不会感觉奇怪了。在es6之前是没有块级作用域的概念的,只有全局作用域和函数作用域,所以这里有两种作用域,click回调的函数作用域,全局作用域(for循环不会产生块级作用域),也就是说i属于全局作用域。click回调里面调用了i值,但里面并没有定义,这个变量就叫做自由变量,js对自由变量取值的逻辑是会沿着作用域链向上寻找,直到找到值,或找不到值为止,当你点击触发回调的时候,函数作用域内没有该变量就会向上寻找,即全局作用域,此时全局作用域中的i值已经为6了(这一点看明白,很重要)。所以你log数出来的每次都是6。

米琪卡哇伊
TA贡献1998条经验 获得超6个赞
es6:varitems=document.querySelectorAll("li");for(leti=0;iitems[i].onclick=function(){ console.log(i)}}es5:varitems=document.querySelectorAll("li");for(vari=0;i(function(i){ items[i].onclick=function(){console.log(i)}})(i)}for循环直接就运行了跑了6次,等你点击的时候i已经等于5
添加回答
举报
0/150
提交
取消