1. 程式人生 > 其它 >js第十二天

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

 定時器:window.clearInterval() 方法用於取消之前通過呼叫 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>