现有如下html结构
<ul>
<li>click me</li>
<li>click me</li>
<li>click me</li>
<li>click me</li>
</ul>
运行如下代码:
var elements=document.getElementsByTagName('li');
var length=elements.length;
for(var i=0;i<length;i++){
elements[i].onclick=function(){
alert(i);
}
依次点击4个li标签,哪一个选项是正确的运行结果()?
A 依次弹出1,2,3,4
B 依次弹出0,1,2,3
C 依次弹出3,3,3,3
D 依次弹出4,4,4,4
答案:D
因为事件(click,focus等等),定时器(setTimeout和setInterval),ajax,都是会触发异步,属于异步任务;js是单线程 的,一个时间点只能做一件事,优先处理同步任务; 按照代码从上往下执行,遇到异步,就挂起,放到异步任务里,继续执行同步任务,只有同步任务执行完了,才去看看有没有异步任务,然后再按照顺序执行!这里for循环是同步任务,onclick是异步任务所以会等for循环执行结束后再触发异步。