博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JS执行机制
阅读量:6070 次
发布时间:2019-06-20

本文共 1041 字,大约阅读时间需要 3 分钟。

同步——一件事做完之后才能干下一件事,效率低;

异步——同时开始干多件事;

JS是单线程执行的,即同步执行,因为前端面对的问题是与用户的交互,若是同时获取事件,比如若是对获取到的同一节点需要作不同操作,会乱套,因此JS是单线程的。但是,如果一直都是同步执行,等一件事做完再去做另一件事,无疑非常耗时,用户体验会很差,因此,又需要JS去异步执行某些操作。

JS中常见异步编程方式有:

1、回调函数——解决异步编程最基本的方法

2、发布订阅、通知

3、事件监听

4、ES 6: Promise

5、ES 7: * async和await

经典面试题:

for(var i=0;i<5;i++){        console.log(i);  //0 1 2 3 4    }    for(var j=0;j<5;j++){        setInterval(function () {            console.log(j);   //5 5 5 5 5 5.....        },1000)    }    for(var j=0;j<5;j++){        setTimeout(function () {            console.log(j);   //=>5 5 5 5 5        },1000)    }

会出现上述结果的原因在于for是同步事件,setTimeout是异步事件,同步事件先执行,异步事件则被放入队列里等待执行。等for执行完,j已经变成了5。

//解决方案1,闭包,实时保存一个j给setTimeout    for(var j=0;j<5;j++){        (function(j){            setTimeout(function () {                console.log(j);   //=>0=>1=>2=>3=>4            },1000)        })(j);    }    //解决方案2,let    for(let j=0;j<5;j++){        setTimeout(function () {            console.log(j);           },1000)    }

 

转载于:https://www.cnblogs.com/wenzizaigaoge/p/10513004.html

你可能感兴趣的文章
js 数组去除重复对象
查看>>
移动互联网之云计算客户端
查看>>
项目实战_Python.利用Pygame编写微信打飞机小游戏完整系列?
查看>>
NAT几种方式实现
查看>>
html基本标签
查看>>
error code [17027]; 流已被关闭;
查看>>
Error:java: Compilation failed: internal java comp
查看>>
关于IE9导入证书,提示成功,但不生效。
查看>>
Linux删除目录下的文件的几种方法
查看>>
时间:2014年4月9日19:50:31 画矩形及饼状图
查看>>
java.lang.OutOfMemoryError: bitmap size exceeds VM budget
查看>>
影响孩子一生的好习惯——专注
查看>>
我的友情链接
查看>>
Oracle数据库实例核心技术解析_超越OCP精通Oracle视频教程培训05
查看>>
获取访客的IP、浏览器等信息
查看>>
Swing界面加载
查看>>
Vmware vsphere 5.5之系统安装
查看>>
python初学
查看>>
a伪类
查看>>
redis对set类型的操作
查看>>