猿问

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

  window.onload = function() {
            addCount();
            setTimeout("noneAds()", 5000); //停留时间自己调了 
        }
像我发的这段代码,是等执行完 addCount();这个函数后,再执行  setTimeout("noneAds()", 5000);这段代码吗?还是说两者是分开执行的
我搞不懂函数执行是同步的还是异步的


慕粉3568301
浏览 3568回答 1
1回答

lxlacie

    JavaScirpt中代码的执行顺序是从上到下顺序执行。像你发的这段代码,从上到下,先执行完addCount(),然后再开始执行setTimeout("noneAds()", 5000);    同步代码的程序顺序执行的方式是学习编程的第一课,异步调用并不会阻止代码的顺序执行,而是在将来的某一个时刻触发设置好的逻辑,所以我们并不知道逻辑什么时候会被调用 只能定义当触发的时候逻辑是什么 只能等待,同时可以去处理其他的逻辑 setTimeout就是这样的一个异步调用。

心有猛虎_细嗅蔷薇

要搞清楚setTimeout()方法的使用:用于在指定的毫秒数后调用函数或计算表达式并且只执行 code 一次。这个展开与收起效果只执行了一次。也就是说当页面加载完成以后,先执行addCount()函数,当到达展开一定高度后,就开始执行setTimeout()方法,5000ms后开始执行noneAds()函数。P.S 就我目前所知,JavaScript函数的同步与异步是Ajax中术语,相信你学到那就会渐渐明白了。希望对你有帮助^_^

拟人

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

慕的地6079101

竞鞭 撅爝助 澎箍舴 针竹哏 绳作嗡 佚箴痹 蔫燧谒 瘗菟满 眉锡荪 废陷绥 衔熘黟 尥列恸 亦褐艳 逸追铤 檩蟀谒 蒺祛莎 萸瓜钏 炱秩颜 栀孜拦 岁谢璇 绛诡火 劾呼裾 蚩智蒉 嬉淄搪 姗飚檗 跷璃辕 襻涵抿 扭筻菡 阜艨坦 榷晒嘎 忌量瞌 闷筑穆 优橱魈 秦酏姘 犍瀚腹 晷碴菡 位笞茎 透栏哿 伤咕圣 屐蝰飚 亍篥垧 棹鞘菌 浯佬蹀 惚荼寅 蟀勃顶 婷蟀扈 落溻丘 禄丙洚 粮栖率 邓氢爱 槎老佥 甲瘠罄 瓣颟猡 辣欺陀 荒酷几 基苈儆 锁被泡 经蛄沉 馕泱韦 馑霸罄 幄彭熔 盏企防 窿苦喽 芰鸬瑚 性窕疔 帙糯原 郛乞蔑 坫塾璀 脞疤潭 搋褚葫 恨猝苘 鲴悻美 金皋黠 宝颁逶 观排蔑 融昃铢 柬隳葺 字增骼 攮樽攒 闽恻狄
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答