一、JS執行機制
-
JS語言有個特點是單執行緒,即同一時間只能做一件事,單執行緒就意味著,所有的任務需要排隊,前一個任務結束,才會執行后一個任務,可能造成頁面渲染不連貫,
-
為了解決這個問題,利用多核CPU的計算能力,允許JS腳本創建多個執行緒,即同步和異步,
-
同步任務:
- 同步任務都在主執行緒上執行,形成一個執行堆疊,
- 前一個任務結束后再去執行下一個任務,程式的執行順序與任務的排列順序是一致的同步的,
- 比如做飯的同步做法,我們要燒水煮飯,等水開了,再去切菜,炒菜,
-
異步任務:
-
通過回呼函式實作的,異步任務相關回呼函式添加到任務佇列中(任務佇列也稱為訊息佇列),
-
在做一件事的同時,還可以去處理其他的事情,
-
比如做飯的異步做法,在燒水的同時,利用這段時間,去切菜,炒菜,
- 異步任務分類:
- 1.普通事件,如click、resize等,
- 2.資源加載,如load、error等,
- 3.定時器,包括setTimeout、setInterval等,
- 異步任務分類:
-
-
同步和異步本質的區別:在這條"流水線"上各個流程的執行順序不同,
-
JS執行機制步驟:
-
由于主執行緒不斷地重復獲得任務、執行任務、再獲取任務、再執行,所以這種機制被稱為事件回圈,即event loop,
-
二、ES6概述
- 新增了變數的宣告方式、解構賦值、模板字串、簡化物件寫法、箭頭函式、函式形參默認值、rest引數、拓展運算子、新增資料型別(Set、Map、Symbol、BigInt)、promise、async/await等,
三、var、let、const的區別
| 區別 | var | let | const |
|---|---|---|---|
| 是否有塊級作用域 | ? | ? | ? |
| 是否存在變數提升 | ? | ? | ? |
| 是否添加全域屬性 | ? | ? | ? |
| 能否重復宣告變數 | ? | ? | ? |
| 是否存在暫時性死區 | ? | ? | ? |
| 是否必須設定初始值 | ? | ? | ? |
| 能否改變指標指向 | ? | ? | ? |
四、箭頭函式與普通函式的區別
- 箭頭函式比普通函式更加簡潔
- 如果只有一個引數,可以省去引數的括號,
- 如果函式體的回傳值只有一句,可以省略大括號,且必須省略return,
- 箭頭函式沒有自己的this
- 箭頭函式不會創建自己的this, 所以它沒有自己的this,它只會在自己作用域的上一層繼承this,所以箭頭函式中this的指向在它在定義時已經確定了,之后不會改變,
- call()、apply()、bind()等方法不能改變箭頭函式中this的指向
- 箭頭函式的this指向要么是window,要么是它的外層,
- 箭頭函式不能作為建構式使用
- 箭頭函式是ES6中的提出來的,它沒有prototype,也沒有自己的this指向,更不可以使用arguments引數,所以不能New一個箭頭函式;new運算子的實作步驟如下:
- 1.創建一個物件
- 2.將建構式的作用域賦給新物件(也就是將物件的proto屬性指向建構式的prototype屬性)
- 3.指向建構式中的代碼,建構式中的this指向該物件(也就是為這個物件添加屬性和方法)
- 4.回傳新的物件,所以,上面的第二、三步,箭頭函式都是沒有辦法執行的
- 箭頭函式是ES6中的提出來的,它沒有prototype,也沒有自己的this指向,更不可以使用arguments引數,所以不能New一個箭頭函式;new運算子的實作步驟如下:
- 箭頭函式沒有自己的arguments
- 箭頭函式沒有自己的arguments物件,在箭頭函式中訪問arguments實際上獲得的是它外層函式的arguments值,
- 箭頭函式沒有prototype
- 箭頭函式不能用作Generator函式,不能使用yield關鍵字
五、箭頭函式的this指向
- 箭頭函式不同于傳統JavaScript中的函式,箭頭函式并沒有屬于??的this,它所謂的this是捕獲其所在上下?的 this 值,作為??的 this 值,并且由于沒有屬于??的this,所以是不會被new調?的,這個所謂的this也不會被改變,箭頭函式的this指向外層函式的this,
六、擴展運算子的作用及使用場景
- 物件擴展運算子
- 物件的擴展運算子(...)用于取出引數物件中的所有可遍歷屬性,拷貝到當前物件之中,擴展運算子對物件實體的拷貝屬于淺拷貝,
- 陣列擴展運算子
- 陣列的擴展運算子可以將一個陣列轉為用逗號分隔的引數序列,且每次只能展開一層陣列,
七、物件與陣列的解構
- 解構是 ES6 提供的一種新的提取資料的模式,這種模式能夠從物件或陣列里有針對性地拿到想要的數值,
- 物件的解構
- 在解構物件時,是以屬性的名稱為匹配條件,來提取想要的資料的,
- 陣列的解構
- 在解構陣列時,以元素的位置為匹配條件來提取想要的資料的,
八、模板語法
- 允許用${}的方式嵌入變數,優勢有兩個:
- 在模板字串中,空格、縮進、換行都會被保留,可以識別html代碼,
- 模板字串完全支持“運算”式的運算式,可以在${}里完成一些計算,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/539796.html
標籤:其他
上一篇:第一百一十二篇: JS陣列Array(一)陣列基本用法
下一篇:記錄--記一次前端CSS升級
