1.實現(xiàn)一個函數(shù)clone鳍贾,可以對JavaScript中的5種主要的數(shù)據(jù)類型(包括Number该默、String、Object限嫌、Array、Boolean)進(jìn)行值復(fù)制
考察點(diǎn)1:對于基本數(shù)據(jù)類型和引用數(shù)據(jù)類型在內(nèi)存中存放的是值還是指針這一區(qū)別是否清楚
考察點(diǎn)2:是否知道如何判斷一個變量是什么類型的
考察點(diǎn)3:遞歸算法的設(shè)計
// 方法一:
Object.prototype.clone = function() {
var o = this.constructor === Array ? [] : {};
for (var e in this) {
o[e] = typeof this[e] === "object" ? this[e].clone() : this[e];
}
return o;
}
//方法二:
/**
* 克隆一個對象
* @param Obj
* @returns
*/
function clone(Obj) {
var buf;
if (Obj instanceof Array) {
buf = []; //創(chuàng)建一個空的數(shù)組
var i = Obj.length;
while (i--) {
buf[i] = clone(Obj[i]);
}
return buf;
} else if (Obj instanceof Object) {
buf = {}; //創(chuàng)建一個空對象
for (var k in Obj) { //為這個對象添加新的屬性
buf[k] = clone(Obj[k]);
}
return buf;
} else { //普通變量直接賦值
return Obj;
}
}
2.下面這個ul时捌,如何點(diǎn)擊每一列的時候alert其index?(閉包)
題目:
<ul id=”test”>
<li>這是第一條</li>
<li>這是第二條</li>
<li>這是第三條</li>
</ul>
// 方法一:
var lis=document.getElementById('test').getElementsByTagName('li');
for(var i=0;i<3;i++)
{
lis[i].index=i;
lis[i].onclick=function(){
alert(this.index);
};
}
//方法二:
var lis=document.getElementById('test').getElementsByTagName('li');
for(var i=0;i<3;i++)
{
lis[i].index=i;
lis[i].onclick=(function(a){
return function() {
alert(a);
}
})(i);
}
3.對于MVVM的理解怒医?
MVVM 是 Model-View-ViewModel 的縮寫。
Model代表數(shù)據(jù)模型奢讨,也可以在Model中定義數(shù)據(jù)修改和操作的業(yè)務(wù)邏輯稚叹。
View 代表UI 組件,它負(fù)責(zé)將數(shù)據(jù)模型轉(zhuǎn)化成UI 展現(xiàn)出來拿诸。
ViewModel 監(jiān)聽模型數(shù)據(jù)的改變和控制視圖行為扒袖、處理用戶交互,
簡單理解就是一個同步View 和 Model的對象亩码,連接Model和View季率。
在MVVM架構(gòu)下,View 和 Model 之間并沒有直接的聯(lián)系蟀伸,
而是通過ViewModel進(jìn)行交互蚀同,Model 和 ViewModel 之間的交互是雙向的缅刽,
因此View 數(shù)據(jù)的變化會同步到Model中,而Model 數(shù)據(jù)的變化也會立即反應(yīng)到View 上蠢络。
ViewModel 通過雙向數(shù)據(jù)綁定把 View 層和 Model 層連接了起來衰猛,
而View 和 Model 之間的同步工作完全是自動的,無需人為干涉刹孔,
因此開發(fā)者只需關(guān)注業(yè)務(wù)邏輯啡省,不需要手動操作DOM,
不需要關(guān)注數(shù)據(jù)狀態(tài)的同步問題,
復(fù)雜的數(shù)據(jù)狀態(tài)維護(hù)完全由 MVVM 來統(tǒng)一管理髓霞。
4.什么是vue生命周期卦睹?
Vue 實例從創(chuàng)建到銷毀的過程,就是生命周期方库。
從開始創(chuàng)建结序、初始化數(shù)據(jù)、編譯模板纵潦、掛載Dom→渲染徐鹤、更新→渲染、銷毀等一系列過程邀层,
稱之為 Vue 的生命周期返敬。
5.Vue的生命周期?
beforeCreate(創(chuàng)建前) 在數(shù)據(jù)觀測和初始化事件還未開始
created(創(chuàng)建后) 完成數(shù)據(jù)觀測,屬性和方法的運(yùn)算寥院,
初始化事件劲赠,$el屬性還沒有顯示出來
beforeMount(載入前) 在掛載開始之前被調(diào)用,
相關(guān)的render函數(shù)首次被調(diào)用秸谢。
實例已完成以下的配置:編譯模板凛澎,把data里面的數(shù)據(jù)和模板生成html。
注意此時還沒有掛載html到頁面上估蹄。
mounted(載入后) 在el 被新創(chuàng)建的 vm.$el 替換预厌,并掛載到實例上去之后調(diào)用。
實例已完成以下的配置:用上面編譯好的html內(nèi)容替換el屬性指向的DOM對象元媚。
完成模板中的html渲染到html頁面中。此過程中進(jìn)行ajax交互苗沧。
beforeUpdate(更新前) 在數(shù)據(jù)更新之前調(diào)用刊棕,發(fā)生在虛擬DOM重新渲染和打補(bǔ)丁之前。
可以在該鉤子中進(jìn)一步地更改狀態(tài)待逞,
不會觸發(fā)附加的重渲染過程甥角。
updated(更新后) 在由于數(shù)據(jù)更改導(dǎo)致的虛擬DOM重新渲染和打補(bǔ)丁之后調(diào)用。
調(diào)用時识樱,組件DOM已經(jīng)更新嗤无,所以可以執(zhí)行依賴于DOM的操作震束。
然而在大多數(shù)情況下,應(yīng)該避免在此期間更改狀態(tài)当犯,因為這可能會導(dǎo)致更新無限循環(huán)垢村。
該鉤子在服務(wù)器端渲染期間不被調(diào)用。
beforeDestroy(銷毀前) 在實例銷毀之前調(diào)用嚎卫。
實例仍然完全可用嘉栓。
destroyed(銷毀后) 在實例銷毀之后調(diào)用。
調(diào)用后拓诸,所有的事件監(jiān)聽器會被移除侵佃,所有的子實例也會被銷毀。該鉤子在服務(wù)器端渲染期間不被調(diào)用奠支。
如下圖所示: