代碼:
<script>
//1----語句式的匿名函數創建以及調用 (function(name,age){ alert("name:"+name+",age:"+age); document.write("name:"+name+",age:"+age+"<br/>"); alert("111"); alert("222"); })("lisi","44"); //------------------------------------------- //3---第三種函數的創建 var f2=new Function("name","age",'alert("name:"+name+",age:"+age);'); f2("zhaijiahao","22");
</script>
瀏覽器測試現象:訪問test.html文件之后的現象
點擊完確定之后緊接着
點擊完確定之后緊接着
點擊完確定之后緊接着,特別注意頁面中的並沒有出現name:lisi,age:44這句話
最后所有的調用的函數中的alert()運行完之后,就會顯示name:lisi,age:44這句話
具體的原因分析:
關於document.write()和alert()執行順序的問題
為什么先寫document.write()輸出,卻要等到后邊的alert執行完成后才顯示document.write()的內容?
解答:
有人認為:alert彈窗會阻塞代碼 要點擊確認才執行下面的代碼,
問題復述:問題是把alert()寫到document.write()之后也是先出彈窗,這是什么原因呢?
更合理的解答:alert會阻塞線程。實際上.write已經執行,只是瀏覽器還沒渲染,這種情況下,有辦法先讓write執行結果顯示。方式:
想實現“先document.write,再alert”。這里提供下思路:1>主線程跑document.write() ,然后利用setTimeOut() 定時0。5秒后執行alert();這個方法是線程不可控的 2>利用promise強制執行document.write()完之后,再在then 方法內執行 alert