ES 6 +ES 5 的相關學習筆記
es6 let set map 箭頭函式
移動端佈局 rem em rem與em都是相對單位,我們使用它們的目的就是為了適應各種手機螢幕。 rem是根據html根節點來計算的,而em是繼承父元素的字型。比如下面一個demo
jq的相容處理 高版本相容低版本,實現相關平滑相容處理。例如加入在jQuery引用的下方加入一個相容包;版本衝突,加一些話。 設計模式 工廠模式,代理模式, react生命週期 React 生命週期分為三種狀態 1. 初始化 2.更新 3.銷燬。
setstate非同步還是同步 有時候同步,有時候非同步 redux改變資料過程
非同步操作放在哪個生命週期 因此就讓其在子元件的componentDidUpdate中處理。 柯里化,高階函式
閉包作用及缺點
prototype 和 __proto__區別
__proto__是每個物件都有的一個屬性,而prototype是函式才會有的屬性!!!
cookie localstorage indexDB區別及作用
sessionStorage、localStorage、cookie
相同點:都儲存在瀏覽器端,同源的:
不同點:
1》傳遞方式不同
cookie資料始終在同源的http請求中攜帶(即使不需要),即cookie在瀏覽器和伺服器間來回傳遞。
sessionStorage和loaclStorage不會自動把資料發給伺服器,僅在本地儲存。
2》資料大小不同
cookie資料還有路徑(path)的概念,可以限制cookie只屬於某個路徑下。
儲存大小限制也不同,cookie資料不能超過4k,同時因為每次http請求都會攜帶cookie,所以cookie只適合儲存很小的資料,如會話標識。
sessionStorage和localStorage雖然也有儲存大小的限制,但比cookie大得多,可以達到5M或者更大。
3》資料有效期不同
sessionStorage:僅在當前瀏覽器視窗關閉前有效,自然也就不可能持久保持;
localStorage:始終有效,視窗或瀏覽器關閉也一直儲存,因此用作持久資料;
cookie只在設定cookie過期時間之前一直有效,即使視窗或瀏覽器關閉。 Cookie具有生命週期
4》作用域不同
sessionStorage不在不同的瀏覽器視窗中共享,即使是同一個頁面;
localStorage在所有同源視窗中都是共享的;
cookie也是在所有同源視窗中都是共享的。
Web Storage支援事件通知機制,可以將資料更新的通知傳送給監聽者。
Web Storage的api介面使用更方便。
其次說說LocalStorage,LocalStorage是用key-value鍵值模式儲存資料,但跟IndexedDB不一樣的是,它的資料並不是按物件形式儲存。它儲存的資料都是字串形式。如果你想讓LocalStorage儲存物件,你需要藉助JSON.stringify()能將物件變成字串形式,再用JSON.parse()將字串還原成物件。但如果要儲存大量的複雜的資料,這並不是一種很好的方案。畢竟,localstorage就是專門為小數量資料設計的,所以它的api設計為同步的。而IndexedDB很適合儲存大量資料,它的API是非同步呼叫的。IndexedDB使用索引儲存資料,各種資料庫操作放在事務中執行。IndexedDB甚至還支援簡單的資料型別。 --------------------- 本文來自 唐策 的CSDN 部落格 ,全文地址請點選:
call apply bind區別及作用 本質的就是改變 this 的指向。區別就是:實現的引數傳入不同。 bind() 方法和前兩者不同在於: bind() 方法會返回執行上下文被改變的函式而不會立即執行,而前兩者是直接執行該函式。他的引數和call()相同。
前端優化 重繪 如何減少重排 Reflow 迴流也叫做(重排) 和 replain 重繪 首先 : 弄清楚什麼是迴流和重繪 1.瀏覽器解析html 原始碼,構造出DOM 樹, 2.瀏覽器開始對CSS 進行解析,構造渲染樹。 3.繪製。 4. 重繪與迴流 當DOM元素影響了元素的幾何屬性(例如寬和高),瀏覽器需要重新計算元素的幾何屬性,同樣其它元素的幾何屬性也會和位置也會因此受到影響。瀏覽器會使渲染樹中受到影響的部分失效,並重新構造渲染樹。這個過程稱為“重排”。 完成重排後,瀏覽器會重新繪製受影響的部分到螢幕上中,該過程稱為“重繪”。 • 重排發生的情況: 新增或刪除可見的DOM元素。 元素位置改變。 元素的尺寸改變(包括:內外邊距、邊框厚度、寬度、高度等屬性的改變)。 內容改變。 頁面渲染器初始化。 瀏覽器視窗尺寸改變。 • 重繪發生的情況: 重繪發生在元素的可見的外觀被改變,但並沒有影響到佈局的時候。比如,僅修改DOM元素的字型顏色(只有Repaint,因為不需要調整佈局) 第三點:如何減少。 1. 壓縮replaints 和 reflows ,使用CSS 去儘量減少這些,一次性操作完畢。 2. 對多個dom進行操作時,我們可以使用一種“離線”方式。 3. 不要經常去訪問計算後的樣式
陣列迭代方法
跨域
還有抽獎那個筆試題有沒有好的思路
ES6中如何處理非同步,手寫一個promise,有哪些狀態? 要想知道promise 的作用,就要先知道非同步操作這個玩意。then用法,catch用法,all用法, race用法 https://www.cnblogs.com/guoyeqiang/p/8243838.html pending進行中 fulfilled以成功 rejected已失敗 resolved 已定型 resolve() reject()
var promise=new Promise(function(resolve,reject){ //code if(/非同步操作/){ resolve(); }else{ reject(); } })
promise.then(function(value) { // success }, function(error) { // failure });
等同於 promise.then( value=>{ // success }, error=> { // failure } );
// bad promise .then(function(data) { // success }, function(err) { // error });
// good promise .then(function(data) { //cb // success }) .catch(function(err) { // error });
原型鏈,https://www.cnblogs.com/shuiyi/p/5305435.html 要想知道原型鏈,就必須知道prototype 和 proto 這兩個屬性是兩個下劃線 1.Prototype 是函式才有的屬性 __proto__是物件才有的屬性是兩個下劃線 跑一遍這個就知道了。 var a = {}; console.log(a.prototype); //undefined console.log(a.proto); //Object {}
var b = function(){} console.log(b.prototype); //b {} console.log(b.proto); //function() {} 2. __proto__到底指向誰 是兩個下劃線 到底指向誰,取決於其實現的方式。 2.1 字面量方式 2.2 構造器方式 2.3Object.create()方式 /1、字面量方式/ var a = {}; console.log(a.proto); //Object {}
console.log(a.proto === a.constructor.prototype); //true
/2、構造器方式/ var A = function(){}; var a = new A(); console.log(a.proto); //A {}
console.log(a.proto === a.constructor.prototype); //true
/3、Object.create()方式/ var a1 = {a:1} var a2 = Object.create(a1); console.log(a2.proto); //Object {a: 1}
console.log(a.proto === a.constructor.prototype); //false(此處即為圖1中的例外情況)
3.什麼是原型鏈。由於__proto__是任何物件都有的屬性,JS 中萬物皆物件,那麼就會形成一條由__proto__串起來的鏈條,遞迴訪問到頭。 var A = function(){}; var a = new A(); console.log(a.proto); //A {}(即構造器function A 的原型物件) console.log(a.proto.proto); //Object {}(即構造器function Object 的原型物件) console.log(a.proto.proto.proto); //null