這篇文章主要介紹“javascript是不是同步的”,在日常操作中,相信很多人在javascript是不是同步的問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”javascript是不是同步的”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
JavaScript是同步的;JavaScript始終是同步的并且是單線程的,只有在可以進行ajax調用的意義上是異步的;同步表示如果正在頁面上執行JavaScript代碼塊,則該頁面上當前將不會執行其他JavaScript。
如何快速入門VUE3.0:進入學習
本教程操作環境:windows10系統、javascript1.8.5版、Dell G3電腦。
JavaScript始終是同步的并且是單線程的。
如果您正在頁面上執行JavaScript代碼塊,則該頁面上當前將不會執行其他JavaScript。
JavaScript僅在可以進行Ajax調用的意義上是異步的。
Ajax調用將停止執行,其他代碼將能夠執行,直到調用返回(成功或其他)為止,此時回調將同步運行。此時將不會再運行其他代碼。它不會中斷當前正在運行的任何其他代碼。
JavaScript計時器與此相同類型的回調一起運行。
將JavaScript描述為異步可能會引起誤解。準確地說JavaScript是同步的且具有各種回調機制的單線程。
jQuery在Ajax調用上有一個選項可以使它們同步(帶有該async: false選項)。初學者可能會不正確地使用它,因為它允許使用一種更傳統的編程模型,而這種模型可能會更習慣。有問題的原因是此選項將阻止頁面上的 所有
JavaScript,直到完成為止,包括所有事件處理程序和計時器。
擴展知識
Javascript語言是一門單線程的語言
單線程和異步確實不能同時成為一個語言的特性。js選擇了成為單線程的語言,所以它本身不可能是異步的。因為瀏覽器只分配給js一個主線程,用來執行那些函數,一次只能執行一個,這些任務形成一個任務隊列排隊等候執行,但前端的某些任務是非常耗時的,比如網絡請求,定時器和事件監聽,如果讓他們和別的任務一樣,都老老實實的排隊等待執行的話,執行效率會非常的低,甚至導致頁面的假死。
JavaScript單線程如何實現異步效果
所以,瀏覽器為這些耗時任務開辟了另外的線程,主要包括http請求線程,瀏覽器定時觸發器,瀏覽器事件觸發線程。宿主環境(瀏覽器)通過事件驅動方式使得js具備了異步的屬性 。
所有任務可以分成兩種,一種是同步任務(synchronous),另一種是異步任務(asynchronous)。同步任務指的是,在主線程上排隊執行的任務,只有前一個任務執行完畢,才能執行后一個任務;異步任務指的是,不進入主線程、而進入"任務隊列"(task queue)的任務,只有等主線程任務執行完畢,"任務隊列"開始通知主線程,請求執行任務,該任務才會進入主線程執行。
CPU忙不過來,倒也算了,但是很多時候CPU是閑著的,因為IO設備(輸入輸出設備)很慢(比如Ajax操作從網絡讀取數據),不得不等著結果出來,再往下執行。
具體來說,異步運行機制如下:
所有同步任務都在主線程上執行,形成一個執行棧(execution context stack)。
主線程之外,還存在一個"任務隊列"(task queue)。只要異步任務有了運行結果,就在"任務隊列"之中放置一個事件。
一旦"執行棧"中的所有同步任務執行完畢,系統就會讀取"任務隊列",那些的異步任務,進入執行棧,開始執行。
主線程不斷重復上面的第三步。
到此,關于“javascript是不是同步的”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。