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

為了賬號安全,請及時綁定郵箱和手機立即綁定

null和命令先后問題

<!DOCTYPE HTML>

<html>

<body>

? ? <p id=demo>length 屬性返回字符串的長度:</p>


<script>


? ?var len = document.getElementById("demo").innerHTML.length;

? ?if(len>=18)? //len>=18是判斷條件

? ?{ document.write("字符長度大于等于18。");

? ?document.getElementById("demo").innerHTML=null}//會隱藏掉<p>里的內容,但是還是會顯示滿足條件后返回的內容

? ?else?

? ?{ document.write("字符長度小于18。");}


? ?if(document.getElementById("demo").innerHTML=null)

? ?{document.write("p不在");}

? ? else??

? ?{ alert("p還在");}//明明p不在了,但是卻彈出p還在

</script>

</body>

</html>

問題:alert無論放在JS哪里,都會最先被執行嗎?

正在回答

2 回答

JavaScript執行原理:

JavaScript 引擎是單線程運行的,瀏覽器無論在什么時候都只且只有一個線程在運行 JavaScript 程序,初衷是為了減少 DOM 等共享資源的沖突??墒菃尉€程永遠會面臨著一個問題,那就是某一段代碼阻塞會導致后續所有的任務都延遲。又由于 JavaScript 經常需要操作頁面 DOM 和發送 HTTP 請求,這些 I/O 操作耗時一般都比較長,一旦阻塞,就會給用戶非常差的使用體驗。

于是便有了事件循環(event loop)的產生,JavaScript 將一些異步操作或 有I/O 阻塞的操作全都放到一個事件隊列,先順序執行同步 CPU代碼,等到 JavaScript 引擎沒有同步代碼,CPU 空閑下來再讀取事件隊列的異步事件來依次執行。

分析:

  1. 由于頁面渲染是 DOM 操作,會被 JavaScript 引擎放入事件隊列;

  2. alert()?是 window 的內置函數,被認為是同步 CPU代碼;

  3. JavaScript 引擎會優先執行同步代碼,alert 彈窗先出現;

  4. alert 有特殊的阻塞性質,JavaScript 引擎的執行被阻塞住;

  5. 點擊 alert 的“確定”,JavaScript 沒有了阻塞,執行完同步代碼后,又讀取事件隊列里的 DOM 操作,頁面渲染完成。

解決:

使用setTimeout異步執行,還有其他辦法例如替換alert等

setTimeout("alert('msg');",?3000);

同學,希望你能看懂^_^


3 回復 有任何疑惑可以回復我~
#1

云林雨 提問者

謝謝,get到新知識了
2020-04-06 回復 有任何疑惑可以回復我~

不是,放在函數里面的話需要調用才會執行,得看你alert放在哪里了

0 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消
JavaScript入門篇
  • 參與學習       741182    人
  • 解答問題       9865    個

JavaScript做為一名Web工程師的必備技術,本教程讓您快速入門

進入課程

null和命令先后問題

我要回答 關注問題
微信客服

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

幫助反饋 APP下載

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

公眾號

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