談一談你對js線程的理解
阿新 • • 發佈:2018-06-25
傳遞參數 改變 AS PE javascrip 瀏覽器 執行順序 主線程 任務
js線程:javascript是單線程的,所有任務都需要排隊,這些任務分為同步任務和異步任務,單線程上有一個主線程任務。同步任務必須再主線程上排隊進行,而異步任務(類似於點擊事件)必須在主線程上的任務全部進行完成後形成一個任務隊列(將所有的觸發事件放在一個任務隊列中),這任務隊列的任務也是需要排隊的,當主線程任務完成後他們將通過觸發事件按順序加入到主線程進行任務。可以改變程序正常執行順序的操作就可以看成是異步操作。
ajax 異步解釋:ajax異步就是當任務隊列存在ajax請求時,當任務走到ajax時,ajax傳遞參數給服務器,而不需要等數據傳到後再執行下面的任務,而是讓請求數據的時間繼續進行下一個任務,從而表現為異步。其中瀏覽器為ajax新開一個線程請求,當數據請求到後將回調函數(success())繼續放入任務隊列中。
<script type="text/javascript"> console.log( "1" ); setTimeout(function() { console.log( "2" ) }, 0 ); setTimeout(function() { console.log( "3" ) }, 0 ); setTimeout(function() { console.log( "4" ) }, 0 ); console.log( "5" ); </script> 輸出:1 5 2 3 4
例如: console.log( "1" ); console.log( "5" ); 就是同步任務, setTimeout就是異步任務,只有當1.5執行完後才開始執行2.3.4
談一談你對js線程的理解