面試題匯總

static目錄和src下的assets的區(qū)別?

assets下的文件會被loader()轉(zhuǎn)譯后存放在dist-static-img文件下,static下的文件會直接拷貝到dist-static下。
建議大的文件放到static下

vuex刷新后數(shù)據(jù)丟失問題。

在app.vue里面created生命周期函數(shù)內(nèi)綁定一個beforeunload事件,在頁面刷新前將vuex當前狀態(tài)存在locastorage中,頁面重新加載時在created生命周期函數(shù)內(nèi)判斷l(xiāng)ocastorage中如果有值,將當前值通過this.$store.replaceState(state: Object)存入state里。

export default {
  name: 'App',
  created () {
    //在頁面加載時讀取sessionStorage里的狀態(tài)信息
    if (sessionStorage.getItem("store") ) {
        this.$store.replaceState(Object.assign({}, this.$store.state,JSON.parse(sessionStorage.getItem("store"))))
    } 

    //在頁面刷新時將vuex里的信息保存到sessionStorage里
    window.addEventListener("beforeunload",()=>{
        sessionStorage.setItem("store",JSON.stringify(this.$store.state))
    })
  }
}

computed和watch屬性的區(qū)別?

computed的依賴屬性其中之一發(fā)生了變化,當前computed屬性都會更新。watch中能監(jiān)聽某一個屬性,當屬性變化時觸發(fā)回調(diào)。
假如c = a(1) + b(2),使用comuted屬性時,當a或者b改變都會觸發(fā)c,但是如果a=>2,b=>1,此時是不會觸發(fā)c的watch回調(diào)。

解釋一下Array響應(yīng)式實現(xiàn)?

當我們初始化data屬性是一個數(shù)組時,會將Array.prototype.push,pop,保存起來,同時重新給當前數(shù)組聲明push,pop函數(shù),這樣它就不會調(diào)用原型鏈上的方法,這樣就可以在自定義的函數(shù)將數(shù)據(jù)處理為可響應(yīng)式的。

說明一下vue的響應(yīng)式原理實現(xiàn)?

當我們初始化date時,會使用Object.defineProperty定義對象屬性set,get描述符,在生成vnode時會獲取對象的值,此時會調(diào)用屬性的get方法,同時會收集依賴,當屬性值改變時調(diào)用set方法,通知依賴進行更新。更新過程其實就是對比新的vnode和舊的vnode,基本上key和tag相同,說明是同一個節(jié)點,可能就是更新dom的textcontent,如果不相同則生成新的dom節(jié)點,刪除舊的dom節(jié)點。

如果理解發(fā)布訂閱模式?

定義了對象間的一種一對多的依賴關(guān)系,當一個對象的狀態(tài)發(fā)生改變時,所有依賴于它的對象都將得到通知,并自動更新。

那些會隱式轉(zhuǎn)換為false

undefined,null,"",0,false,NaN,其它的都隱式轉(zhuǎn)換為true。

  • console.log(i++);
    也是需要先輸出i,再進行++自增運算。
  • . 和 new ,new xx() 運算符優(yōu)先級
function Foo() {
    getName = function () { alert (1); };
    return this;
}
Foo.getName = function () { alert (2);};
Foo.prototype.getName = function () { alert (3);};
var getName = function () { alert (4);};
function getName() { alert (5);}
 
//請寫出以下輸出結(jié)果:
Foo.getName();
getName();
Foo().getName();
getName();
new Foo.getName();
new Foo().getName();
new new Foo().getName();

new Foo() >> . >> () 函數(shù)調(diào)用 >> new

為什么使用前端框架

  • 組件化使工程易于維護、易于組合擴展
  • UI與狀態(tài)的同步,提高了開發(fā)效率
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容