js第十二天
定時器
兩種定時器
1、setTimeout():window.setTimeout(呼叫函式, [延遲的毫秒數]),該定時器在定時器到期會執行呼叫函式。呼叫的函式可以是匿名函式,也可以是函式名。
延遲的毫秒可以不寫,預設為 0。定時器在一個頁面裡可能有很多個,所以要給定時器賦值一個識別符號。
清除 setTimeout 定時器:window.clearTimeout( 定時器的名字 )
<button>點選</button> <script> let time = setTimeout(()=> { console.log('要清除這個定時器'); }, 2000) document.querySelector('button').addEventListener('click', () => { // 清除定時器 clearTimeout(time) }) </script>
2、setInterval():window.setInterval(回撥函式,[間隔的毫秒數]),setInterval()方法重複呼叫一個函式,每隔這個時間就去呼叫一次回撥函式。
清除 setInterval
<button>按鈕</button> <script> let setinterval = setInterval(() => { console.log('會重複執行的定時器'); }, 1000) document.querySelector('button').addEventListener('click', () => { clearInterval(setinterval) })</script>
this 指向
1、一般情況下 this 最終指向的是那個呼叫它的物件。
2、全域性作用域或普通函式中的 this 指向全域性物件 window,注意定時器裡的 this 指向 window。
3、在方法中,誰呼叫這個方法誰就是 this。
4、在建構函式中,this 指向它的例項物件。
js 執行機制
同步和非同步
同步:前一個任務執行完之後再執行後一個任務,程式的執行順序與任務的排列順序是一致的。
非同步:在做一件事情時,因為這件事情會花費很長時間,在做這件事的同時還可以處理其他事情。
同步任務:同步任務都在主執行緒上執行,形成一個執行棧。
非同步任務:js 的非同步是通過回撥函式實現的。一般有三種類型,1、普通事件,如 click 等。2、資源載入,如 load 等。3、定時器,包括 setInterval 和 setTimeout 等。非同步任務相關的回撥函式新增到任務佇列(也稱為訊息佇列)中。
執行機制
1、先執行執行棧中的同步任務。
2、非同步任務放入任務佇列中。
3、一旦執行棧中的所有同步任務執行完畢,系統就會按次序讀取任務佇列中的非同步任務,於是被讀取的非同步任務結束等待狀態,進入執行棧,開始執行。
由於主執行緒不斷的重複獲得任務、執行任務、再獲取任務、再執行,所以這種機制被稱為事件迴圈。
location 物件
什麼是 location 物件
window 物件給我們提供了一個 location 屬性用於獲取或設定窗體的URL,並且可以用於解析URL。因為這個屬性返回的是一個物件,所以我們將這個屬性也稱為 location物件。
URL
統一資源定位符。是網際網路上標準資源的地址。網際網路上的每個檔案都有一個唯一的 URL,它包含的資訊指出檔案的位置以及瀏覽器應該如何處理它。
常見的屬性
location物件屬性 | 返回值 |
location.href | 獲取或設定整個URL |
location.host | 返回主機(域名)www.itemma.com |
location.port | 返回埠號 如果未寫返回空字串 |
location.pathname | 返回路徑 |
location.search | 返回引數 |
location.hash | 返回片段 # 後面內容,常見於連結、錨點 |
常見的方法
location物件方法 | 返回值 |
location.assign() | 跟 href 一樣,可以跳轉頁面(也稱為重定向頁面) |
location.replace() | 替換當前頁面,因為不記錄歷史,所以不能後退頁面 |
location.reload() | 重新載入頁面,相當於重新整理或 F5 如果引數為 true 強制重新整理 ctrl + F5 |
<button>有歷史記錄</button> <button>無歷史記錄</button> <button>重新整理</button> <script> let btns = document.querySelectorAll('button') btns[0].addEventListener('click', () => { // 有歷史記錄所以能後退 location.assign('http://www.baidu.com') }) btns[1].onclick = () => { // 沒有歷史記錄所以不能後退 location.replace('http://www.baidu.com') } btns[2].onclick = () => { // 重新整理頁面 如果引數為true表示強制重新整理 location.reload() } </script>