1 回答

TA貢獻35條經驗 獲得超11個贊
????JavaScirpt中代碼的執行順序是從上到下順序執行。像你發的這段代碼,從上到下,先執行完addCount(),然后再開始執行setTimeout("noneAds()",?5000);
????同步代碼的程序順序執行的方式是學習編程的第一課,異步調用并不會阻止代碼的順序執行,而是在將來的某一個時刻觸發設置好的邏輯,所以我們并不知道邏輯什么時候會被調用?只能定義當觸發的時候邏輯是什么?只能等待,同時可以去處理其他的邏輯?setTimeout就是這樣的一個異步調用。

TA貢獻119條經驗 獲得超250個贊
要搞清楚setTimeout()方法的使用:用于在指定的毫秒數后調用函數或計算表達式并且只執行 code 一次。
這個展開與收起效果只執行了一次。也就是說當頁面加載完成以后,先執行addCount()函數,當到達展開一定高度后,就開始執行setTimeout()方法,5000ms后開始執行noneAds()函數。
P.S 就我目前所知,JavaScript函數的同步與異步是Ajax中術語,相信你學到那就會漸漸明白了。
希望對你有幫助^_^

TA貢獻37條經驗 獲得超15個贊
javascript代碼是同步的,單線程的,就是由上往下執行,按照我的理解來說,只有ajax是異步的執行了,線程遇到ajax的代碼段時,主線程不會去執行ajax里的代碼,而是跳過這段代碼。那ajax里的代碼誰去執行呢?這個任務交給了瀏覽器的線程(不是javascript的線程,javascript的線程已經跳過了再往下執行別的代碼,同一時間點執行了多個任務,這個也許就是異步吧),然后等主線程上任務都執行完了之后,ajax再將執行的結果返回進行處理,就是執行success function(){...}里面的方法。而setTimeout()其實并不是真正意義上的異步,不會同一時間點執行多個任務,它的作用的,將setTimeout()包裹的代碼段移動到執行任務的最后,而里面的那個時間參數表示的是執行這段代碼的最短時間,就算參數為0,也會放到最后執行。

TA貢獻3593條經驗 獲得超0個贊
添加回答
舉報