挑戰前端知識點HTTP/ECMAScript

哪吒人生信條:若是你所學的東西 處於喜歡 纔會有強大的動力支撐。javascript

天天學習編程,讓你離夢想更新一步,感謝不負每一份熱愛編程的程序員,不論知識點多麼奇葩,和我一塊兒,讓那一顆像四處流蕩的心定下來,一直走下去,加油,2021加油!歡迎關注加我vx:xiaoda0423,歡迎點贊、收藏和評論html

不要懼怕作夢,可是呢,也不要光作夢,要作一個實幹家,而不是空談家,求真力行。前端

前言

但願能夠經過這篇文章,可以給你獲得幫助。(感謝一鍵三連),接收好挑戰了嗎?java

關於HTTP模塊

1.說說你對HTTP和HTTPS的理解,並說一下它們的端口號是什麼

好的,HTTP是超文本傳輸協議,是一個基於請求與響應,無狀態的,應用層的協議,常基於TCP/IP協議傳輸數據,互聯網上應用最爲普遍的一種網絡協議,全部的www文件都必須遵照這個標準,設計HTTP的初衷是爲了提供一種發佈和接收HTML頁面的方法。git

HTTP是一種普遍使用的網絡傳輸協議,是客戶端瀏覽器或其餘程序與web服務器之間的應用層通訊協議或者標準tcp,用於從www服務器傳輸超文本到本地瀏覽器的傳輸協議,它可使瀏覽器更加高效,使網絡傳輸減小。程序員

那麼HTTPS,它是一種經過計算機網絡進行徹底通訊的傳輸協議,通過HTTP進行通訊,利用SSL/TLS創建通訊,加密數據包。HTTPS使用的主要目的是提供對網站服務器的身份認證,同時保護交換數據的隱私與完整性。es6

https是http的加密版,是以安全爲目標的http,在http中加入ssl,安全基礎是ssl。 github

TLS是傳輸層加密協議,前身是SSL協議。web

HTTP一般承載於TCP之上,在HTTTPTCP之間添加一個安全協議層(SSLTSL),就是咱們常說的HTTPS編程

HTTP特色:

支持客戶端或服務器模式,C/S模式;

簡單快速,客戶端向服務器請求服務時,只需傳送請求方法和路徑。請求方法經常使用的有GET,HEAD,POST,每種方法規定了客戶與服務器聯繫的類型不一樣,因爲HTTP協議簡單,使得HTTP服務器的程序規模小,於是通訊速度很快;

比較靈活,HTTP容許傳輸任意類型的數據對象,正在傳輸的類型由Content-Type加以標記;

無鏈接,表示限制每次鏈接只處理一個請求,服務器處理完客戶端的請求,並收到客戶端的應答後,就斷開鏈接,採用這種方式能夠節省傳輸時間;

無狀態,HTTP協議是無狀態的協議,無狀態表示協議對於事務處理是沒有記憶能力的,缺乏狀態意味着若是後續處理須要前面的信息,則它就必須重傳,這樣可能致使每次鏈接傳送的數據量不斷增長,另外一方面,在服務器不須要先前信息時它的應答就比較快。

HTTPS特色

它是採用混合加密技術,中間者是沒法看到明文內容,對內容加密過;

又對身份進行驗證,經過證書認證客戶端訪問的是本身的服務器;

能夠防止傳輸的內容被中間人冒充或者篡改,保戶了數據的完整性。

HTTPURL是以http://開頭,對於HTTPSURL是以https://開頭;HTTP是不安全的,而HTTPS是安全的;HTTP沒法加密,而HTTPS對傳輸的數據進行加密;HTTP無需證書,而HTTPS須要CA機構的頒發的SSL證書。

它們的端口號分別是:

HTTP默認的端口號爲80HTTPS默認的端口號爲443

那麼HTTPS更加安全的由於是:在網絡請求中,須要不少服務器,路由器的轉發。其中的節點均可能篡改信息,而若是使用HTTPS,密鑰在終點站纔有。HTTPS之因此比HTTP安全,是由於它利用ssl/tls協議傳輸。它包含證書,卸載,流量轉發,負載均衡,頁面適配,瀏覽器適配,refer傳遞等技術,保障了傳輸過程的安全性。

https,全稱Hyper Text Transfer Protocol Secure,相比http,多一個secure,這一個secure是由TLS(ssl)提供的。httpshttp都屬於application layer,基於tcp以及udp協議,可是又徹底不同。

http是客戶端和服務器端之間數據傳輸的格式規範,表示「超文本傳輸協議」

小結

  1. 無狀態協議對於事務沒有記憶能力,缺乏狀態表示若是後續須要處理,須要前面提供的信息
  2. 克服無狀態協議缺陷的辦法是經過cookie和會話保存信息

2.http/2你瞭解多少

HTTP/2引入了「服務器端推送」的概念,它容許服務器端在客戶端須要數據以前主動將數據發送到客戶端緩存中,從而提升性能。

HTTP/2提供更多的加密支持。使用多路技術,容許多個消息再一個鏈接上同時交差。增長了頭壓縮,所以請求很是小,請求和響應的header都只會用很小的帶寬比例。

http/2協議是基於https的,因此http/2的安全性也是有保障的。

頭部壓縮:http/2會壓縮頭,若是你同時發出多個請求,他們的頭是同樣的或是類似的,那麼,協議會幫你消除重複的部分。

對於http/2再也不使用像http/1.1裏的純文本形式的報文,而是採用了二進制格式。頭信息和數據體都是二進制,統稱爲幀,頭信息幀和數據幀。

數據流:http/2的數據包不是按順序發送的,同一個鏈接裏面連續的數據包,可能屬於不一樣的迴應,必需要對數據包作標記,指出它屬於哪一個迴應。每一個請求或迴應的全部數據包,稱爲一個數據流。

多路複用:http/2是能夠在一個鏈接中併發多個請求或迴應,而不用按照順序一一對應,解決了http/1.1中的串行請求,不須要排隊等待,也就不會出現隊頭阻塞問題,下降了延遲,大幅度提升了鏈接的利用率。

服務器推送,http/2改善了傳送的請求-應答工做模式,服務端再也不是被動響應,也能夠自動向客戶端發送信息了。

http2問題出如今,多個http請求在複用一個tcp鏈接,下層的tcp協議是不知道有多少個http請求的,一旦發生丟包現象,會觸發tcp的重傳機制,這樣一個tcp鏈接中的全部的http請求都必須等待這個丟了的包被重傳回來。

第一,http/1.1中的管道傳輸中若是有一個請求阻塞了,那麼隊列後請求也通通被阻塞了。第二,http/2多請求複用一個tcp鏈接,一旦發生丟包,就會阻塞全部的http請求。

3.說說http常見的狀態碼

五大類的http狀態碼:

1xx: 提示信息,表示目前是協議處理的中間狀態,後續還有操做

2xx: 成功,報文已經收到並被正確處理,200, 204, 206

3xx: 重定向,資源位置發生變更,須要客戶端從新發送請求

4xx: 客戶端錯誤,請求報文有誤,服務器沒法處理

5xx:服務器錯誤,服務器在處理請求時內部發生了錯誤

  1. 100 Continue 表示繼續,通常在發送post請求時,已經發送了http header以後,服務器端將返回此信息,表示確認,以後發送具體參數信息。
  2. 200 ok 表示正常返回信息。
  3. 201 Created 表示請求成功而且服務器建立了新的資源
  4. 202 Accepted 表示服務器已經接受請求,但還沒有處理
  5. 301 Moved Permanently 表示請求的網頁已永久移動到新位置
  6. 302 Found 表示臨時性重定向
  7. 303 See Other 表示臨時性重定向,且老是使用GET請求新的URI
  8. 304 Not Modified 表示自從上次請求後,請求的網頁僞修改過
  9. 400 Bad Request 表示服務器沒法理解請求的格式,客戶端不該當嘗試再次使用相同的內容發送請求。
  10. 401 Unauthorized 表示請求未受權
  11. 403 Forbidden 表示禁止訪問
  12. 404 Not Found 表示找不到如何與uri 相匹配的資源
  13. 500 Internal Server Error 表示最多見的服務器端錯誤
  14. 503 Service Unavailable 表示服務器端暫時沒法處理請求

4.說說http事務流程

第一步,域名的解析;第二步,發起tcp的三次握手;第三步,創建tcp鏈接後發起HTTP請求;第四步,服務器端響應HTTP請求,瀏覽器獲得HTML代碼;第五步,瀏覽器解析HTML代碼,並請求HTML代碼中的資源;第六步,瀏覽器對頁面進行渲染並呈現給用戶。

5.手寫簡單的HTTP服務器

var http = require('http');

http.createServer(function(req, res){
 res.writeHead(200, {'Content-Type': 'text/html'});
 res.write('<meta charset="UTF-8"><h1>dadaqianduan</h1>');
 res.end();
}).listen(3000);

6.說說http的請求報文和響應報文包含哪些部分

請求報文包含三部分:

1.請求行,包含請求方法,URI,HTTP版本信息

2.請求首部字段

3.請求內容實體

請求報文包含三部分:

1.狀態行,包含HTTP版本,狀態碼,狀態碼的緣由短語

  1. 響應首部字段
  2. 響應內容實體

7. 什麼是反向代理

反向代理,Reverse Proxy,是指經過代理服務器來接收互聯網上的鏈接請求,而後將請求轉發給內部網絡上的服務器,並把從服務器上獲得的結果返回給互聯網上請求鏈接的客戶端,此時代理服務器對外就表現爲一個反向代理服務器。

8.HTTP中有哪些請求方式

GET,請求訪問已經被uri,統一資源標識符識別的資源,能夠經過url,給服務器傳遞參數數據

POST,傳輸信息給服務器,主要功能與GET方法相似,但傳遞的數據量一般不受限制。

PUT,傳輸文件,報文主體中包含文件內容,保存到對應的URI位置。

HEAD,得到報文首部,與GET方法相似,只是不返回報文主體,通常用於驗證URI是否有效。

DELETE,刪除文件,與PUT方法相反,產生對應URI位置的文件

OPTIONS,查詢相應URI支持的HTTP方法

9.HTTP協議中1.0版本規範與1.1版本規範的區別

http1.0中,當創建鏈接後,客戶端發送一個請求,服務器端返回一個信息後就關閉鏈接,當瀏覽器下次請求的時候又要創建鏈接,這種不斷創建鏈接的方法會形成不少問題。

http1.1中,引入了連續鏈接的概念,經過這種鏈接,瀏覽器能夠在創建一個鏈接以後,發送請求並獲得返回信息,而後繼續發送請求再次等到返回信息。客戶端能夠連續發送多個請求,而不用等待每個響應的到來。

10.HTTP的首部字段包括哪些類型

通用首部字段,請求報文和響應報文都會使用的首部字段
  1. Date,建立報文的時間
  2. Connection,鏈接的管理
  3. Cache-Control,緩存的控制
  4. Transfer-Encoding,報文主體的傳輸編碼方式
請求首部字段,請求報文會使用的首部字段
  1. Host,請求資源所在服務器
  2. Accept,可處理的媒體類型
  3. Accept-Charset,可接受的字符集
  4. Accept-Encoding,可接受的內容編碼
  5. Accept-Language:可接受的天然語言
響應首部字段,響應報文會使用的首部字段
  1. Accept-Ranges,可接受的字節範圍
  2. Location,令客戶端從新定向到URI
  3. Server,HTTP服務器的安裝信息
實體首部字段,請求報文與響應報文的實體部分使用的首部字段
  1. Allow,資源可支持的http方法
  2. Content-Type,實體主體的類型
  3. Content-Encoding,實體主體使用的編碼方式
  4. Content-Language,實體主體的天然語言
  5. Content-Length,實體主體的字節數
  6. Content-Range,實體主體的位置範圍,通常用於發出部分請求時使用

11.與https相比,http有什麼缺點

http的缺點是:通訊使用明文,不加密,內容可能被竊聽,也就是被抓包分析;不驗證通訊方身份,可能遭到假裝;沒法驗證報文完整性,可能性篡改。

https就是 http+加密處理+認證+完整性保護

12.如何優化HTTP請求

利用負載均衡優化和加速HTTP應用請求,利用HTTP緩存來優化網站請求

13.HTTP協議有哪些特徵

支持客戶端或服務器模式,簡單快捷,靈活,無鏈接,無狀態。

14.HTTP1.1版本的新特性

默認持久鏈接,節省通訊量,只要客戶端或服務端中任意一端沒有明確指出斷開TCP鏈接,就一直保持鏈接,能夠屢次發送HTTP請求。

管線化,客戶端能夠同時發出多個HTTP請求,而不用一個個等待響應。

斷點續傳原理。

15.tcp傳輸的三次握手,四次揮手

三次握手,用tcp把數據包發送出去後,tcp不會對傳送後的數據置之不理,它必定會向對方確認是否成功送達。握手過程當中使用了tcp的標誌,既是 SYN 和 ACK

發送端首先給接收端發送一個帶SYN標誌的數據包。接收端收到後,回傳一個帶有SYN/ACK標誌的數據包以表示正確傳達,並確認信息。最後,發送端再回傳一個帶ACK標誌的數據包,表明「握手」結束。若在握手過程當中的某個階段莫名中斷,TCP會再次以相同的順序發送相同的數據包。

斷開一個TCP鏈接則須要「四次握手」

第一次握手:主動關閉方發送一個 FIN,用來關閉主動關閉方到被動關閉方的數據傳送,也就是主動關閉方告訴被動關閉方,主動關閉方已經不會再給被動關閉方發送數據了,可是,此時主動關閉方還能夠接收數據。

第二次握手:被動關閉方收到FIN包後,給對方發送一個ACK,確認序號爲收到序號+1,與SYN相同,一個FIN佔用一個序號。

第三次握手:被動關閉方收到FIN包後,用來關閉被動關閉方到主動關閉方的數據傳送,也就是告訴主動關閉方,被動關閉方的數據也發送完了,不會再給主動關閉方發送數據了。

第四次握手:主動關閉方收到FIN後,給被動關閉方發送一個ACK,確認序號爲收到序號+1

16.說說tcp和udp的區別

tcp傳輸控制協議,是基於鏈接的協議,也就是說,在正式收發數據前,必須和對方創建可靠的鏈接。一個tcp鏈接必需要通過三次對話才能創建起來。

udp用戶數據報協議,是與tcp相對應的協議。它是面向非鏈接的協議,它不與對方創建鏈接,而是直接就把數據包發送過去。udp適用於一次只傳送少許數據,對可靠性要求不高的應用環境。

17.一個頁面從輸入url到頁面加載顯示完成的過程發送什麼

當發送一個url請求時,這個url是web頁面的url仍是web頁面上每一個資源的url,瀏覽器都會開啓一個線程來處理這個請求,同時在遠程dns服務器上啓動一個dns查詢,這能使瀏覽器得到請求對應的Ip地址。

瀏覽器與遠程web服務器經過tcp三次握手協商來創建一個tcp/ip鏈接。該握手包括一個同步報文,一個同步-應答報文和一個應答報文,這個3個報文在瀏覽器和服務器之間傳遞,該握手首先由客戶端嘗試創建起通訊,而後服務器應答並接受客戶端的請求,最後由客戶端發出已經接受該請求的報文。

一旦tcp/ip鏈接創建,瀏覽器會經過該鏈接向遠程服務器發送HTTP的GET請求,遠程服務器找到資源並使用HTTP響應返回該資源,值爲200的HTTP響應狀態碼錶示一個正確的響應。

web服務器提供資源服務,客戶端開始下載資源,請求返回後,便進入了瀏覽器模塊,瀏覽器會解析HTML生成DOM Tree,其次會根據CSS生成CSS規則樹,而javascript又能夠根據DOM API操做DOM

18.網絡分層模型有哪一個七層

  1. 應用層:容許訪問OSI環境的手段
  2. 表示層:對數據進行翻譯,加密和壓縮
  3. 會話層:創建,管理和終止會話
  4. 傳輸層:提供端到端的可靠報文傳遞和錯誤恢復
  5. 網絡層:負責數據包從源到宿的傳遞和網際互聯
  6. 數據鏈路層:將比特組裝成幀並實現點到點的傳遞
  7. 物理層:經過媒介傳輸比特,肯定機械以及電氣規範

19.說說304緩存的原理

服務器首先爲請求生成ETag,服務器可在稍後的請求中,使用它來判斷頁面是否已經修改,本質上,客戶端經過將該記號傳回服務器要求服務器驗證其客戶端是否緩存。

304是HTTP狀態碼,服務器用它來標識這個文件沒有修改,不返回內容,瀏覽器在接收到個狀態碼後,會使用瀏覽器已緩存的文件。

客戶端請求頁面A,服務器返回頁面A,並給A加上一個ETag,客戶端展示該頁面,並將頁面連同ETag一塊兒緩存,客戶端再次請求頁面A,並將上次請求時服務器返回的ETag一塊兒傳遞給服務器。服務器檢查該ETag,並判斷出該頁面自上次客戶端請求以後還未被修改,直接返回響應304和一個空的響應體。

es模塊

20.總結嚴格模式的限制

  1. 變量必須聲明後再使用
  2. 函數的參數不能有同名參數,不然報錯
  3. 不能使用with語句
  4. 不能對只讀屬性賦值,不然報錯
  5. 不能使用八進制數,不然報錯
  6. 不能使用特殊字符
  7. 不能使用delete刪除變量,方法等,只能用delete刪除對象的屬性
  8. eval不會在它的外層做用域引入變量
  9. eval和arguments不能被從新賦值
  10. arguments不會自動反映函數參數的變化
  11. 不能使用arguments.callee
  12. 不能使用arguments.caller
  13. 禁止this指向全局對象
  14. 不能使用fn.caller和fn.arguments獲取函數調用的棧
  15. 增長了保留字

21.說說es6

  1. 新增了模板字符串${}
  2. 箭頭函數
  3. for-of
  4. 獲取剩餘參數語法代替arguments對象
  5. 定義默認參數語法
  6. es6Promise對象歸入規範,提供了原生的Promise對象
  7. 增長了let關鍵字以定義塊做用域的變量
  8. 增長了const以定義常量
  9. 增長了Symbol數據類型
  10. 引入module模塊的概念

22.Promise有哪些特色

es6原生提供了Promise對象,它是用來處理異步操做的。

Promise對象特色:

對象的狀態不受外界影響,Promise對象有三個狀態:Pending,進行中,Resolved,已完成,Rejected,已失敗,只有異步操做的結果,能夠決定當前是哪種狀態,任何其餘操做都沒法改變這個狀態。

一旦狀態改變,就不會再改變,任什麼時候候均可以獲得這個結果。Promise對象的改變,只有兩種可能,從Pending變爲Resolved和從Pending變爲Rejected。只有這兩種狀況,狀態就固定了,會一直保持這個結果,不會再變了。

即便對Promise對象添加回調函數,也會當即獲得這個結果,這與事件徹底不一樣,事件的特色是,若是你錯過了它,再去監聽,也沒法獲得結果。

有了Promise對象,就能夠將異步操做以同步操做的流程表達出來,避免了層層嵌套到的回調函數,此外,Promise對象提供統一的接口,使得控制異步操做更加容易。

缺點:沒法取消Promise,一旦新建,它就會當即執行,沒法中途取消,若是不設置回調函數,Promise內部拋出的錯誤不會反映到外部。

23.說說Promise的理解

三種狀態:

Pending指初始狀態,非FulfilledRejected狀態

Resolved指成功的操做

Rejected是指失敗的操做

let p = new Promise(resolve, reject) => {
 if(condition) {
  resolve(result)
 }else{
  reject(result)
 }
}
});

promise.then(onResolved,onRejected)

24.es6實現數組去重

// es5
var varr [1,2,3,4,3,4,5,5,3]
function removeDa(arr){
 var obj = {};
 arr.forEach(function(item,index){
  obj[item] = true
 })
 return Object.keys(obj);
}
// es6
let removeDa = arr => [...{new Set([...arr]))];

25.es6使用進行兩個數的交換

let a = 1, b = 2;
[a,b] = [b,a];
console.log(a); // 2
console.log(b); // 1

26.爲啥使用es6

第一:符合將來趨勢;第二:提升開發效率;第三:減小代碼量,提升可讀性等。

27.如何讓開發環境下的瀏覽器支持es6

使用babel編譯

28.es6let關鍵字支持塊級做用域嗎

var arr = [];
for (var i = 0; i < 5; i++){
 arr[i] = function(){
  console.log(i);
 }
}
arr[3](); // 5

let arr = [];
for(let i = 0; i < 5; i++) {
 arr[i] = function() {
  console.log(i);
 }
}
arr[3](); // /5

letJavaScript新增了塊級做用域,用它聲明的變量只在let關鍵字所在的代碼塊內有效。

29.代碼示例

var obj = {
 // es5
 fn1: function() {
  console.log('fn1',this)
 },
 fn2:() => {
  console.log('fn3',this)
 }
}
obj.fn1(); // obj
obj.fn2(); // window

30.super是什麼

它是一個關鍵字,用法爲super(...)或者super.xx(...)

super的語法定義和this不一樣,this的定義是this這個關鍵字會被替換成一個引用,而super則是super(...)會被替換成一個調用。除了能夠在constructor裏被直接調用super外,還可使用super.xx(...)來調用父類上的某個原型方法,這一樣是一種限定語法。

31.代碼示例

(function(x,f=()=>x){
 var x:
 var y = x;
 x = 2;
 return [x,y,fn()];
})(1)

[2,1,1]

32.代碼示例

(function(){
 console.log([
 (()=>this.x).bind({x:'inner'})(),
 (()=>this.x)()
 })
}).call({x:'outer'});
// ['outer','outer']

33.代碼示例

(function(){
 let a = this?class b{} : class c{};
 console.log(typeof a, typeof b, typeof c)
})()
// function undefined undefined

34.代碼示例

(typeof (new (class { class () {} })))
// object
var Test = class{
 class(){}
};
var test = new Test();
typeof test;

35.代碼示例

(function(){
if(false){
let f={g()=>1};
}
return typeof f;
})()
// error

36.什麼是DOM模板

dom模板是原先就寫在頁面上的而且能被瀏覽器識別的html結果,在加載的時候,就會被瀏覽器渲染。因此要遵循HTML結構和標籤命名,否則沒法被瀏覽器解析,也就沒法獲取內容了,而後用JavaScript獲取DOM節點的內容,就造成了DOM模板。

37.什麼是字符串模板

字符串模板可能原先放在服務器上的script標籤裏,做爲JavaScript字符串,而且不參與頁面渲染,因此它可能不在意HTML結構和標籤命名,只要最後根據模板生成對應的結構而且命名符合HTML規範。

38.請說出擴展運算符與剩餘操做符之間的區別

在某種程度上,剩餘操做符和擴展運算符相反。擴展運算符會使數組「展開」成多個元素,剩餘操做符會收集多個元素並「壓縮」成一個單一的元素。

39.var,let,const聲明變量的區別

var聲明的變量不支持塊做用域,支持聲明前置,能夠重複定義,而且值能夠改動。

let聲明的變量支持塊做用域,不支持聲明前置,不能重複定義,而且值能夠修改。

const定義常量,聲明的常量支持做用域,不支持聲明前置,不能重複定義,值沒法修改,值一般是值類型的,不能用來定義循環變量。

40.解構分類

對象解構;數組解構;混合解構;參數解構。

41.es6extends支持多重繼承嗎

es6不支持多重繼承,可是能夠經過混合等技術來模擬,一旦使用多重繼承,則按聲明前後順序覆蓋同名屬性方法。

42.剩餘參數和arguments對象的區別

剩餘參數只包含那些沒有對應形參的實參,而arguments對象包含了傳給函數的全部實參。

arguments對象不是一個真實的數組,而剩餘參數是真實的Array實例,可以在它上面直接使用全部的數組方法。

arguments對象還有一些附加的屬性。

若是想在arguments對象上使用數組方法,首先要將它轉換爲真實的數組。

43.for..of有點是啥

有着同for...in的簡潔語法,可是沒有for...in的缺點

不一樣於forEach方法,能夠與break,continue,return配合使用

提供了遍歷全部數據結構的統一操做接口

44.爲何修飾器不能用於函數

修飾器只能用於類和類的方法,不能用於函數,由於存在函數提高

45.Iterator接口的目的是啥

爲全部數據結構提供了一種統一的訪問機制,for..of循環

當使用for...of循環遍歷某種數據結構時,該循環會自動尋找Iterator接口.

46.使用外部的模塊腳本須要注意哪幾點

代碼在模塊做用域中進行,而不是在全局做用域中運行,模塊內部的頂層變量,在外部不可見。

不管有沒有聲明use strict,模塊腳本都自動採用嚴格模式

在模塊中,可使用import命令加載其餘模塊,也可使用export命令輸出對外接口

在模塊中,頂層的this關鍵字返回undefined,而不是指向window,也就是說在模塊頂層使用this,是無心義的。

同一個模塊若是加載屢次,將只執行一次。

47.Iterator的做用和遍歷過程

第一,爲各類數據結構提供一個統一的,簡便的訪問接口

第二,使得數據結構的成員可以按某種次序排序

第三,ES6創造了一種新的遍歷命令for...of循環,Iterator接口主要提供for...of使用

過程:

建立一個指針對象,指向當前數據結構的起始位置,也就是說,遍歷器對象本質上就是一個指針對象。

第一次調用指針對象的next方法,能夠將指針指向數據結構的第一個成員

第二次調用指針對象的next方法,指針指向數據結構的第二個成員

不斷調用指針對象的next方法,直到它指向數組結構的結束位置。每一次調用next方法,都會返回數據結構中當前成員的信息。

48.async函數有幾種聲明形式

函數聲明

async function da(){}

表達式聲明

var bar = async function () {}

經過對象聲明

var obj = {
 async daFun(){}
}

經過箭頭函數聲明

var da = async() =>{}

49.async函數中,如何處理錯誤語句

try...catch

async function demo() {
 try{
  await doSomeThing();
 } catch(err){
  console.log(err)
 }
}

添加catch回調函數

async function demo() {
 await doSomeThing().cache(err=>console.log(err))
}

50.es6中,generator函數的throw方法如何使用

throw()會恢復generator的執行,且在執行點上拋出異常

throw()next()同樣會返回{value,done},只會拋出的異常獲得處理了,generator函數體纔會真正執行throw()

點贊、收藏和評論

我是Jeskson(達達前端),感謝各位人才的:點贊、收藏和評論,咱們下期見!(如本文內容有地方講解有誤,歡迎指出☞謝謝,一塊兒學習了)

咱們下期見!

文章持續更新,能夠微信搜一搜「 程序員哆啦A夢 」第一時間閱讀,回覆【資料】有我準備的一線大廠資料,本文 http://www.dadaqianduan.cn/#/ 已經收錄

github收錄,歡迎Starhttps://github.com/webVueBlog/WebFamily

相關文章
相關標籤/搜索