为了账号安全,请及时绑定邮箱和手机立即绑定

我搞不懂函数执行是同步的还是异步的

我搞不懂函数执行是同步的还是异步的

慕粉3568301 2017-01-11 08:11:51
  window.onload = function() {            addCount();            setTimeout("noneAds()", 5000); //停留时间自己调了         }像我发的这段代码,是等执行完 addCount();这个函数后,再执行  setTimeout("noneAds()", 5000);这段代码吗?还是说两者是分开执行的我搞不懂函数执行是同步的还是异步的
查看完整描述

1 回答

已采纳
?
lxlacie

TA贡献35条经验 获得超11个赞

    JavaScirpt中代码的执行顺序是从上到下顺序执行。像你发的这段代码,从上到下,先执行完addCount(),然后再开始执行setTimeout("noneAds()", 5000);

    同步代码的程序顺序执行的方式是学习编程的第一课,异步调用并不会阻止代码的顺序执行,而是在将来的某一个时刻触发设置好的逻辑,所以我们并不知道逻辑什么时候会被调用 只能定义当触发的时候逻辑是什么 只能等待,同时可以去处理其他的逻辑 setTimeout就是这样的一个异步调用。


查看完整回答
1 反对 回复 2017-01-11
?
心有猛虎_细嗅蔷薇

TA贡献119条经验 获得超250个赞

要搞清楚setTimeout()方法的使用:用于在指定的毫秒数后调用函数或计算表达式并且只执行 code 一次。

这个展开与收起效果只执行了一次。也就是说当页面加载完成以后,先执行addCount()函数,当到达展开一定高度后,就开始执行setTimeout()方法,5000ms后开始执行noneAds()函数。

P.S 就我目前所知,JavaScript函数的同步与异步是Ajax中术语,相信你学到那就会渐渐明白了。

希望对你有帮助^_^


查看完整回答
4 反对 回复 2017-01-11
?
拟人

TA贡献37条经验 获得超15个赞

javascript代码是同步的,单线程的,就是由上往下执行,按照我的理解来说,只有ajax是异步的执行了,线程遇到ajax的代码段时,主线程不会去执行ajax里的代码,而是跳过这段代码。那ajax里的代码谁去执行呢?这个任务交给了浏览器的线程(不是javascript的线程,javascript的线程已经跳过了再往下执行别的代码,同一时间点执行了多个任务,这个也许就是异步吧),然后等主线程上任务都执行完了之后,ajax再将执行的结果返回进行处理,就是执行success function(){...}里面的方法。而setTimeout()其实并不是真正意义上的异步,不会同一时间点执行多个任务,它的作用的,将setTimeout()包裹的代码段移动到执行任务的最后,而里面的那个时间参数表示的是执行这段代码的最短时间,就算参数为0,也会放到最后执行。

查看完整回答
2 反对 回复 2017-01-11
  • 1 回答
  • 0 关注
  • 3474 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信