前端知識點HTTP/ECMAScrip

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

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

不要害怕做夢,但是呢,也不要光做夢,要做一個實幹家,而不是空談家,求真力行。

前言

希望可以通過這篇文章,能夠給你得到幫助。(感謝一鍵三連),接收好挑戰了嗎?

關於HTTP模塊

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

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

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

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

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

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

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()

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章