原创 談談防抖和節流

防抖 高頻觸發事件,在規定時間內(比如5s)僅執行一次,該時間內再次觸發重新計時,可以理解爲觸發一次事件的時間:time >= 5s; // 高頻事件 常見的dom的事件 const timer = null const scro

原创 瞭解es6的flat和Set

數組去重我們一般大腦最先想到的就是遍歷操作,es6可以通過Set進行去重,但是new Set的原型是Set,不是Array,必然需要進行轉換;轉換的方式很多,比如: 1、Array.from() 2、拓展運算符… 針對多維數組我

原创 IIFE非匿名函數

var b = 10; (function b() { b = 20; console.log(b) })() // 打印 // ƒ b() { // b = 20; // console.log(b) // }

原创 談談箭頭函數和function的區別

箭頭函數和function的區別 作用域: 箭頭函數指向其定義環境,this的指向無法通過其他方式改變; function指向其直接調用者,一般來說最通常的是window對象,對象屬性則指向改對象; 構造函數:箭頭函數不能當做構

原创 簡單談談parseInt

最近面試高發題 [1, 2, 3].map(parseInt) 結果和原因? 結果:[1, NaN, NaN] 原因: [1, 2, 3].map(parseInt) 完整形式 => [1, 2, 3].map((val

原创 虛擬dom的實現和diff算法

現在主流框架都採用虛擬dom,爲什麼? 一個真實dom的生成代價很昂貴,不過js的運行速度很快,這樣我們通過對js的虛擬dom樹操作,通過Diff算法來對真實dom做出相應的操作,效率事倍功半。 首先看看一個虛擬dom的結構,其實

原创 Proxy觀察者模式以及Object.defineProperty的缺點

Proxy實現觀察者模式(vue3.0) vue3.0之前通過Object.defineProperty數據劫持來實現數據監聽,vue3.0即將引入Proxy來實現。 //添加觀察者 const queuedObse

原创 for循環和forEach的速度問題

for循環是比較古老的循環方式,不少人對他的寫法已經覺得厭煩,隨着js的發展越來越多的遍歷方式逐一誕生: forEach, map, filter,every,some,for of等等,簡潔的語法讓人賞心悅目。 forEach代

原创 題目:改造代碼,打印0-9

for (var i = 0; i< 10; i++){ setTimeout(() => { console.log(i); }, 1000) } // 10 原因:作用域,for循環中頭部使用

原创 ES6 Set Map WeakSet WeakMap區別

Set成員的值都是唯一的,沒有重複的值。(如果成員是引用類型,區分唯一性通過內存地址) WeakSet與Set的區別: 成員必須爲對象; const a = new WeakSet() a.add(target) // tar

原创 深度優先遍歷DFS和廣度優先遍歷BFS

深度優先遍歷:豎向優先遍歷 const data = [ { name: 'a', children: [ { name: 'b', children: [{ na

原创 談談setTimeout、Promise、Async/Await 的區別

首先我們談談Event Loop: setTimeout是一個macro任務 promise、和await後續爲micro任務 所以在執行順序上會先進行同步代碼,再者Promise、Async/Await,最好setTimeo

原创 前端安全:幾種攻擊模式

1.XSS攻擊 主要是注入js代碼,通過將js代碼存入數據庫或者通過修改 URL 參數的方式加入攻擊代碼,誘導用戶訪問鏈接從而進行攻擊。 防禦措施: 對字符串進行轉義 通常來說主要針對script標籤進行轉義 functi

原创 算法:把倆個數組 [A1, A2, B1, B2, C1, C2] 和 [A, B, C],合併 [A1, A2, A, B1, B2, B, C1, C2, C]

Array.prototype.reduce是個計算的好手: 考慮兩個數組的相似點都有相同是字母開頭,可以用雙重遍歷正則匹配插入也可以用startsWith判斷首字母; const arr1 = ["A1", "A2", "B1"

原创 設計 LazyMan 類

實現以下功能: LazyMan('Tony'); // Hi I am Tony LazyMan('Tony').sleep(10).eat('lunch'); // Hi I am Tony // 等待了10秒... // I