異步
1.知道哪部分代碼是異步的;
2.必須要知道異步程式之中的資料或者賦值的變數在哪里可用;
js:單執行緒語言
- 上面一行代碼不執行結束,下面一行代碼不會執行;
單執行緒
多執行緒
- js中存在很大需要長時間等待才會執行的代碼;
異步:在js中需要消耗大量時間等待某些程式執行的時候,會讓正常程式繼續執行.耗時較長的程式等會執行.耗時較長的程式我們把它稱之為異步程式;
js設定的異步:
- 事件;
- 定時器;
- 所有的ajax請求
- promise
異步程式是等到所有同步程式執行結束才會去執行的代碼;
- 事件有事件處理函式(回呼函式)
- 定時器有回呼函式
- ajax請求也有回呼函式
- promise...
異步程式的第二個特征就是必須有個回呼函式
- 回呼函式: 同步程式執行結束之后,回頭呼叫的函式;
異步的執行順序; Event Loop;
異步實戰??*
如果把script標簽放在head中,即body之上,如果不使用異步程式的回呼函式包裹,列印出來的lis.length為0,放在異步程式之中,則會放在所有代碼之后執行,即可獲得最終的lis.length!
<script>
// 異步程式之中的代碼,會在當前所有代碼之后執行;
// setTimeout(function(){
// // 放在了最上面;
// var lis = document.getElementsByTagName("li");
// console.log(lis.length);
// },0)
window.onload = function(){
var lis = document.getElementsByTagName("li");
console.log(lis.length);
}
</script>
<body>
<ul>
<li>hello world</li>
<li>hello world</li>
<li>hello world</li>
<li>hello world</li>
<li>hello world</li>
</ul>
</body>
面試題中的異步
根據異步的原理,定時器里的回呼函式在for回圈結束之后呼叫,所以無論定時器的時間間隔是多少,最后列印的結果都是10;
for(var i = 0; i <= 10 ; i ++ ){
setTimeout(function(){
console.log(i);//10
},0)
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/138148.html
標籤:JavaScript
上一篇:Ajax的原理及封裝
下一篇:TypeScript資料型別
