同步跟异步

本文解释了同步和异步的概念,特别关注于JavaScript中的单线程环境如何处理异步操作,以及异步可能导致的问题,如B函数先于A函数执行,因为异步任务使A函数延迟至任务队列中执行。
摘要由CSDN通过智能技术生成

同步跟异步概念:

同步:同步是指一个进程在执行某个请求的时候,如果该请求需要一段时间才能返回信息,那么这个进程会一直等待下去,直到收到返回信息才继续执行下去。
异步:异步是指进程不需要一直等待下去,而是继续执行下面的操作,不管其他进程的状态,当有信息返回的时候会通知进程进行处理,这样就可以提高执行的效率了,即异步是我们发出的一个请求,该请求会在后台自动发出并获取数据,然后对数据进行处理,在此过程中,我们可以继续做其他操作,不管它怎么发出请求,不关心它怎么处理数据。

为什么会出现异步问题?

  • 由于JavaScript是一门单线程语言,即同一时间只能做一件事;
  • JS本身是同步执行;
  • 但在执行耗时操作时为了避免阻塞后续代码的执行,通常采用异步操作;
  • 通过事件循环(event loop)实现异步。

异步操作会导致:如果下一个函数需要未执行完成的当前函数中的元素,由于当前函数未对该元素进行处理,而异步使得下一个函数先执行,自然导致下一个函数中获取的该元素为空。辅助代码如下:

<script type="text/javascript">
		window.onload=function(){
		    A();
		    B();
		}
 
		function A(){
		    setTimeout(function(){
		        window.data=100;
				console.log("A:",window.data)
		    },3000);
			
		}
		
		function B(){
		    console.log("B:",window.data);
		}
</script>

结果为:

 如果不存在异步,即:先执行A(),浏览器等待3s后,对window.data赋值,再输出window.data的值;再执行B()
目前存在异步使得,先执行B(),再执行A()。因为setTimeout中的函数没有立即执行,而是延迟了一段时间,所以可知,A中存在异步任务--》B函数先执行。将A放入任务队列中,等待同步任务和任务队列现有的事件实行完才会执行。
 


 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值