亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

我搞不懂函數執行是同步的還是異步的

我搞不懂函數執行是同步的還是異步的

慕粉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 關注
  • 3674 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號