我是靠谱客的博主 合适麦片,最近开发中收集的这篇文章主要介绍JS异步一错题,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

现有如下html结构

1

2

3

4

5

6

<ul>

 <li>click me</li>

 <li>click me</li>

 <li>click me</li>

 <li>click me</li>

</ul>

运行如下代码:

1

2

3

4

5

6

7

    var elements=document.getElementsByTagName('li');

    var length=elements.length;

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

        elements[i].onclick=function(){

        alert(i);

    }

 }

依次点击4个li标签,哪一个选项是正确的运行结果()?

依次弹出1,2,3,4
依次弹出0,1,2,3
依次弹出3,3,3,3
依次弹出4,4,4,4

这里考的是JS的运行机制! 事件(click,focus等等),定时器(setTimeout和setInterval),ajax,都是会触发异步,属于异步任务;js是单线程的,一个时间点只能做一件事,优先处理同步任务; 按照代码从上往下执行,遇到异步,就挂起,放到异步任务里,继续执行同步任务,只有同步任务执行完了,才去看看有没有异步任务,然后再按照顺序执行! 这里for循环是同步任务,onclick是异步任务,所以等for循环执行完了,i变成4了,注意:这里因为i是全局变量,最后一个i++,使得i为4(后面的onclick函数,最后在循环外面执行,不受i<length限制); 所以for循环每执行一次,onclick事件函数都会被挂起一次,共4次; for循环结束后,点击事件 触发了4个onclick函数,接着输出4个4! 

最后

以上就是合适麦片为你收集整理的JS异步一错题的全部内容,希望文章能够帮你解决JS异步一错题所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(41)

评论列表共有 0 条评论

立即
投稿
返回
顶部