正在回答
1、js是单线程,所以程序的执行顺序就是从上到下依次执行,同一时间内只能有一段代码被执行。
2、ajax异步:ajax异步请求就当发出请求的同时,浏览器可以继续做任何事,Ajax发送请求并不会影响页面的加载与用户的操作,相当于是在两条线上,各走各的,互不影响。在异步模式下,当我们使用ajax发送完请求后,可能还有代码需要执行。这个时候可能由于种种原因导致服务器还没有响应我们的请求,但是因为采用了异步执行方式,所有包含ajax请求代码的函数中的剩余代码将继续执行,如果我们是将请求结果交由另外一个JS函数去处理的,那么,这个时候就好比两条线程同时执行一样。
比如说,当页面的单线程(js)执行xhr.send()之后,对于页面来说发送任务已经完成了,怎么发送,那是浏览器的事,和单线程无关,什么时候响应,这事说不准,为了及时地得到响应的内容,在单线程中注册相应的事件就好xhr.onreadystatechange = fn() {...},注册之后,浏览器会在内部的其他线程中自动地帮我们监听该事件,直到该事件被触发,浏览器会在任务队列中添加一个任务等待该单线程执行
希望可以帮到你~
1、js是单线程的,单线程和异步确实不能同时成为一个语言的特性。js选择了成为单线程的语言,所以它本身不可能是异步的,但js的宿主环境(比如浏览器,Node)是多线程的,宿主环境通过某种方式(事件驱动,下文会讲)使得js具备了异步的属性。
2、异步要和同步进行对比:
同步指的是一次只能完成一件任务。如果有多个任务,就必须排队,前面一个任务完成,再执行后面一个任务,以此类推。
异步指的是每一个任务有一个或多个回调函数(callback),前一个任务结束后,不是执行后一个任务,而是执行回调函数,后一个任务则是不等前一个任务结束就执行,所以程序的执行顺序与任务的排列顺序是不一致的、异步的。
常见的异步有:1、点击时间,2、定时器,3、AJAX请求。
那么,ajax请求内容的时候是异步的,当请求完成后,会触发请求完成的事件,然后把回调函数放入callback ,等到主线程执行该回调函数时还是单线程的。
其实,回调函数也相当于异步操作,所以可以在函数A里面回调函数B。
如果帮助到了你,欢迎采纳!
相似问题
登录后可查看更多问答,登录/注册
- 参与学习 人
- 提交作业 467 份
- 解答问题 4826 个
本路径带你通过系统学习HTML5、JavaScript、jQuery的进阶知识,不仅如此,还会学习如何利用组件化的思想来开发网页,知识点+案例,使得所学可以更好的得到实践。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星