JS一些概念知識及參考鏈接
1、setTimeout、setInterval、promise、宏任務、微任務
先執(zhí)行宏任務整體 script 同步代碼,然后遇到 setTimeout 或者 setInterval 即放到宏任務隊列中,遇到微任務放到微任務隊列中。整體 script 同步代碼執(zhí)行完后再執(zhí)行微任務隊列,執(zhí)行完后再執(zhí)行 setTimeout 那邊的宏任務隊列。
- macro-task(宏任務):包括整體代碼script,setTimeout,setInterval
- micro-task(微任務):Promise,process.nextTick
參考:https://www.jianshu.com/p/92f4506a28d0、https://juejin.im/post/59e85eebf265da430d571f89
2、事件的三種模型
參考:http://www.rzrgm.cn/leaf930814/p/6980501.html#top
3、前端路由是怎么實現的
參考:https://segmentfault.com/a/1190000011967786
4、防抖函數和節(jié)流函數
參考:http://www.rzrgm.cn/chenqf/p/7986725.html
5、webpack實現按需加載
參考:https://blog.csdn.net/qq_27626333/article/details/76228578
6、vue中實現路由攔截、http攔截
參考:https://blog.csdn.net/wang1006008051/article/details/77962942、https://blog.csdn.net/qq_39759115/article/details/77185101、https://blog.csdn.net/cofecode/article/details/79181894
7、動態(tài)加載JS腳本
動態(tài)加載JS腳本時,如果要先判斷動態(tài)加載的腳本是否已經執(zhí)行完畢時,IE瀏覽器可以觀察 script 標簽的 readyState 屬性,其他瀏覽器可以用 onload 方法來完成。
詳情參考:https://www.jb51.net/article/139481.htm
8、JS中不同數據類型間進行運算
參考:https://blog.csdn.net/zlingyun/article/details/82561259
9、閉包解決for循環(huán)輸出 i 為同一值的問題
參考:http://www.rzrgm.cn/wgphp/p/7805152.html
11、原型鏈繼承、構造函數繼承、組合式繼承
(1)原型鏈繼承代碼簡單,易實現,但是子類實例修改父類中的引用類型屬性值時,其他子類實例的該值也將發(fā)生改變。因為通過原型對象 prototype 實現繼承,則原型對象中的所有引用類型值都是復用的,即都是同一個值。并且在創(chuàng)建子類實例時,無法向父類構造函數傳參
(2)構造函數繼承解決了子類實例對引用類型值的誤修改操作問題,但是每個實例都拷貝一份引用類型值,占用內存大,尤其是方法過多的時候。(函數復用又無從談起了,本來我們用 prototype 就是解決復用問題的)
(3)組合繼承既解決了子類實例對引用類型值的誤修改操作問題,在創(chuàng)建子類實例時也向父類構造函數傳參,又可以復用一些屬性。在組合繼承中,在父類的原型對象中定義的屬性都是會復用的,而在父類的構造函數里定義的屬性都不是復用的屬性。
ES6中類的繼承可以看做是組合式繼承的語法糖(簡單理解),但兩者的繼承機制還是不太一樣的。
參考:http://www.rzrgm.cn/sarahwang/p/6879161.html、http://www.rzrgm.cn/sarahwang/p/9098044.html、http://www.rzrgm.cn/humin/p/4556820.html
12、HTTP和HTTPS
HTTP的弊端:超文本傳輸協議HTTP協議被用于在Web瀏覽器和網站服務器之間傳遞信息。HTTP協議以明文方式發(fā)送內容,不提供任何方式的數據加密,如果攻擊者截取了Web瀏覽器和網站服務器之間的傳輸報文,就可以直接讀懂其中的信息,因此HTTP協議不適合傳輸一些敏感信息,比如信用卡號、密碼等。
HTTPS:為了解決HTTP協議的這一缺陷,需要使用另一種協議:安全套接字層超文本傳輸協議HTTPS。為了數據傳輸的安全,HTTPS在HTTP的基礎上加入了SSL協議,SSL依靠證書來驗證服務器的身份,并為瀏覽器和服務器之間的通信加密。但是,加密和解密過程需要耗費系統大量的開銷,嚴重降低傳輸數據的工作效率。
HTTPS的數據傳輸是用對稱加密的,不過要先用非對稱加密來加密傳輸對稱加密的密鑰,而證書的作用就是證明傳輸過來的非對稱的公鑰就是那個人的。
比如說服務器和客戶端是通過對稱加密傳輸數據的,但是要使用對稱加密就兩者就必須有一個共同的密鑰,客戶端要想把這個共同的密鑰傳輸給服務器,就必須先對這個密鑰加密。
客戶端傳輸這個密鑰時使用的是非對稱加密(非對稱加密是公鑰加密的數據只可以通過私鑰解開,私鑰加密的數據有公鑰就可以解開,公鑰是公開的,誰都可以有它的公鑰),服務器端維護一個私鑰和公鑰,不過先要把公鑰傳輸給客戶端,然后客戶端就可以使用公鑰加密數據(即對稱加密算法的密鑰)傳輸給服務器。
不過客戶端怎么確定收到的公鑰是來自所需要的服務器的而不是黑客的呢?這就要使用到證書了。公證機構CA給服務器頒發(fā)私鑰和證書,證書包括該服務器的基本信息 + 公鑰 + 數字簽名。數字簽名的形成:首先將服務器的基本信息和公鑰通過 hash 算法得到一個 hash 值,然后通過公證機構的私鑰來對該 hash 值進行加密就形成了數字簽名。當服務器把它的證書傳輸給客戶端,客戶端就可以使用公證機構的公鑰來對數字簽名進行解密,得到一個hash值,然后將證書里面的基本信息和公鑰通過使用同樣的 hash 算法來進行計算又得到一個 hash 值,如果兩個 hash 值相同,即可以判斷證書是服務器的證書,公鑰也就是服務器的公鑰,由此就可以得到服務器傳輸過來的公鑰了。
就像前面所說的一樣,得到公鑰以后客戶端就可以通過該公鑰來對傳輸的數據(即對稱加密算法的密鑰)進行加密,服務器端就可以使用私鑰對數據進行解密,得到將要使用的對稱加密算法的密鑰,然后服務器和客戶端就可以使用對稱加密來進行傳輸數據了。


參考:https://juejin.im/post/5a7146fd51882573351a9d99#heading-1
12.1、HTTPS的缺點
(1)https加重了服務端的負擔,相比于http其需要更多的資源來支撐,同時也降低了用戶的訪問速度
(2)目前來說大多數網站并不關心數據的安全性和保密性,即https最大的優(yōu)點對它來說并不適用
(3)https的技術門檻較高,多數個人或者私人網站難以支撐,CA機構頒發(fā)的證書都是需要年費的,此外對接Https協議也需要額外的技術支持
13、JS中的new關鍵字的工作過程
function Animal(name) {
this.name = name;
}
Animal.color = "black";
Animal.prototype.say = function () {
console.log("I'm " + this.name);
};
var cat = new Animal("cat");
console.log(
cat.name, //cat
cat.height //undefined
);
cat.say(); //I'm cat
console.log(typeof Animal);
console.log(
Animal.name, //Animal
Animal.color //back
);
Animal.say(); //Animal.say is not a function
JS引擎在執(zhí)行 new 關鍵詞那段代碼時,在內部進行了很多工作,用偽代碼模擬其工作流程如下:
new Animal("cat") = {
var obj = {};
obj.__proto__ = Animal.prototype;
var result = Animal.call(obj,"cat");
return typeof result === 'object'? result : obj;
}
參考:http://www.rzrgm.cn/AaronNotes/p/6529492.html
14、websocket
參考:http://www.runoob.com/html/html5-websocket.html、 https://www.zhihu.com/question/20215561
15、瀏覽器的渲染引擎和JS引擎
參考:https://blog.csdn.net/BonJean/article/details/78453547、 https://github.com/zwwill/blog/issues/2
16、瀏覽器緩存機制
參考:https://www.jianshu.com/p/54cc04190252
17、JS返回上一頁并刷新頁面
參考:https://www.jb51.net/article/165478.htm

浙公網安備 33010602011771號