哪吒人生信條:如果你所學的東西 處於喜歡 纔會有強大的動力支撐。
每天學習編程,讓你離夢想更新一步,感謝不負每一份熱愛編程的程序員,不論知識點多麼奇葩,和我一起,讓那一顆像四處流蕩的心定下來,一直走下去,加油,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
之上,在HTTTP
和TCP
之間添加一個安全協議層(SSL
或TSL
),就是我們常說的HTTPS
。
HTTP特點:
支持客戶端或服務器模式,C/S模式;
簡單快速,客戶端向服務器請求服務時,只需傳送請求方法和路徑。請求方法常用的有GET,HEAD,POST
,每種方法規定了客戶與服務器聯繫的類型不同,由於HTTP協議簡單,使得HTTP服務器的程序規模小,因而通信速度很快;
比較靈活,HTTP允許傳輸任意類型的數據對象,正在傳輸的類型由Content-Type
加以標記;
無連接,表示限制每次連接只處理一個請求,服務器處理完客戶端的請求,並收到客戶端的應答後,就斷開連接,採用這種方式可以節省傳輸時間;
無狀態,HTTP
協議是無狀態的協議,無狀態表示協議對於事務處理是沒有記憶能力的,缺少狀態意味着如果後續處理需要前面的信息,則它就必須重傳,這樣可能導致每次連接傳送的數據量不斷增加,另一方面,在服務器不需要先前信息時它的應答就比較快。
HTTPS
特點
它是採用混合加密技術,中間者是無法看到明文內容,對內容加密過;
又對身份進行驗證,通過證書認證客戶端訪問的是自己的服務器;
可以防止傳輸的內容被中間人冒充或者篡改,保戶了數據的完整性。
HTTP
的URL
是以http://
開頭,對於HTTPS
的URL
是以https://
開頭;HTTP
是不安全的,而HTTPS
是安全的;HTTP
無法加密,而HTTPS
對傳輸的數據進行加密;HTTP
無需證書,而HTTPS
需要CA
機構的頒發的SSL
證書。
它們的端口號分別是:
HTTP
默認的端口號爲80
,HTTPS
默認的端口號爲443
那麼HTTPS
更加安全的因爲是:在網絡請求中,需要很多服務器,路由器的轉發。其中的節點都可能篡改信息,而如果使用HTTPS,密鑰在終點站纔有。HTTPS之所以比HTTP安全,是因爲它利用ssl/tls
協議傳輸。它包含證書,卸載,流量轉發,負載均衡,頁面適配,瀏覽器適配,refer傳遞等技術,保障了傳輸過程的安全性。
https
,全稱Hyper Text Transfer Protocol Secure
,相比http
,多一個secure
,這一個secure
是由TLS(ssl)提供的。https
和http
都屬於application layer
,基於tcp
以及udp
協議,但是又完全不一樣。
http是客戶端和服務器端之間數據傳輸的格式規範,表示“超文本傳輸協議”
小結
無狀態協議對於事務沒有記憶能力,缺少狀態表示如果後續需要處理,需要前面提供的信息
克服無狀態協議缺陷的辦法是通過
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
:服務器錯誤,服務器在處理請求時內部發生了錯誤
100 Continue
表示繼續,一般在發送post請求時,已經發送了http header之後,服務器端將返回此信息,表示確認,之後發送具體參數信息。200 ok
表示正常返回信息。201 Created
表示請求成功並且服務器創建了新的資源202 Accepted
表示服務器已經接受請求,但尚未處理301 Moved Permanently
表示請求的網頁已永久移動到新位置302 Found
表示臨時性重定向303 See Other
表示臨時性重定向,且總是使用GET
請求新的URI
304 Not Modified
表示自從上次請求後,請求的網頁僞修改過400 Bad Request
表示服務器無法理解請求的格式,客戶端不應當嘗試再次使用相同的內容發送請求。401 Unauthorized
表示請求未授權403 Forbidden
表示禁止訪問404 Not Found
表示找不到如何與uri 相匹配的資源500 Internal Server Error
表示最常見的服務器端錯誤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
版本,狀態碼,狀態碼的原因短語
響應首部字段
響應內容實體
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
的首部字段包括哪些類型
通用首部字段,請求報文和響應報文都會使用的首部字段
-
Date
,創建報文的時間 -
Connection
,連接的管理 -
Cache-Control
,緩存的控制 -
Transfer-Encoding
,報文主體的傳輸編碼方式
請求首部字段,請求報文會使用的首部字段
-
Host
,請求資源所在服務器 -
Accept
,可處理的媒體類型 -
Accept-Charset
,可接受的字符集 -
Accept-Encoding
,可接受的內容編碼 -
Accept-Language
:可接受的自然語言
響應首部字段,響應報文會使用的首部字段
-
Accept-Ranges
,可接受的字節範圍 -
Location
,令客戶端重新定向到URI -
Server
,HTTP服務器的安裝信息
實體首部字段,請求報文與響應報文的實體部分使用的首部字段
-
Allow
,資源可支持的http方法 -
Content-Type
,實體主體的類型 -
Content-Encoding
,實體主體使用的編碼方式 -
Content-Language
,實體主體的自然語言 -
Content-Length
,實體主體的字節數 -
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.網絡分層模型有哪個七層
- 應用層:允許訪問OSI環境的手段
- 表示層:對數據進行翻譯,加密和壓縮
- 會話層:建立,管理和終止會話
- 傳輸層:提供端到端的可靠報文傳遞和錯誤恢復
- 網絡層:負責數據包從源到宿的傳遞和網際互聯
- 數據鏈路層:將比特組裝成幀並實現點到點的傳遞
- 物理層:通過媒介傳輸比特,確定機械以及電氣規範
19.說說304
緩存的原理
服務器首先爲請求生成ETag
,服務器可在稍後的請求中,使用它來判斷頁面是否已經修改,本質上,客戶端通過將該記號傳回服務器要求服務器驗證其客戶端是否緩存。
304是HTTP
狀態碼,服務器用它來標識這個文件沒有修改,不返回內容,瀏覽器在接收到個狀態碼後,會使用瀏覽器已緩存的文件。
客戶端請求頁面A,服務器返回頁面A,並給A加上一個ETag,客戶端展現該頁面,並將頁面連同ETag一起緩存,客戶端再次請求頁面A,並將上次請求時服務器返回的ETag一起傳遞給服務器。服務器檢查該ETag,並判斷出該頁面自上次客戶端請求之後還未被修改,直接返回響應304和一個空的響應體。
es模塊
20.總結嚴格模式的限制
- 變量必須聲明後再使用
- 函數的參數不能有同名參數,否則報錯
- 不能使用
with
語句 - 不能對只讀屬性賦值,否則報錯
- 不能使用八進制數,否則報錯
- 不能使用特殊字符
- 不能使用
delete
刪除變量,方法等,只能用delete
刪除對象的屬性 -
eval
不會在它的外層作用域引入變量 -
eval和arguments
不能被重新賦值 -
arguments
不會自動反映函數參數的變化 - 不能使用
arguments.callee
- 不能使用
arguments.caller
- 禁止
this
指向全局對象 - 不能使用
fn.caller和fn.arguments
獲取函數調用的棧 - 增加了保留字
21.說說es6
- 新增了模板字符串
${}
- 箭頭函數
for-of
- 獲取剩餘參數語法代替
arguments
對象 - 定義默認參數語法
-
es6
將Promise
對象納入規範,提供了原生的Promise
對象 - 增加了
let
關鍵字以定義塊作用域的變量 - 增加了
const
以定義常量 - 增加了
Symbol
數據類型 - 引入
module
模塊的概念
22.Promise
有哪些特點
es6
原生提供了Promise
對象,它是用來處理異步操作的。
Promise
對象特點:
對象的狀態不受外界影響,Promise對象有三個狀態:Pending,進行中,Resolved,已完成,Rejected,已失敗
,只有異步操作的結果,可以決定當前是哪一種狀態,任何其他操作都無法改變這個狀態。
一旦狀態改變,就不會再改變,任何時候都可以得到這個結果。Promise對象的改變,只有兩種可能,從Pending變爲Resolved和從Pending變爲Rejected
。只有這兩種情況,狀態就固定了,會一直保持這個結果,不會再變了。
即使對Promise
對象添加回調函數,也會立即得到這個結果,這與事件完全不同,事件的特點是,如果你錯過了它,再去監聽,也無法得到結果。
有了Promise
對象,就可以將異步操作以同步操作的流程表達出來,避免了層層嵌套到的回調函數,此外,Promise
對象提供統一的接口,使得控制異步操作更加容易。
缺點:無法取消Promise
,一旦新建,它就會立即執行,無法中途取消,如果不設置回調函數,Promise
內部拋出的錯誤不會反映到外部。
23.說說Promise
的理解
三種狀態:
Pending
指初始狀態,非Fulfilled
或Rejected
狀態
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.es6
中let
關鍵字支持塊級作用域嗎
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
let
爲JavaScript
新增了塊級作用域,用它聲明的變量只在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.es6
的extends
支持多重繼承嗎
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()
。