1、? ?function fun(n,o) {
????????????console.log(o)
? ? ? ? ? ? return {
? ? ? ? ? ? ? ? fun:function(m){
????????????????????return fun(m,n);
????????????????}
????????????}
????????}
????????var fn = fun(0).fun(1)
? ? ? ? fn.fun(2)
????????fn.fun(3)
? ?這個(gè)也是很經(jīng)典的面試題了,首先這個(gè)里面考的是閉包的知識(shí)。答案是會(huì)打印undefined, 0,1,1.下面我們來分析下這個(gè)題,首先要能區(qū)分fun函數(shù)里面的兩個(gè)fun地方,第一個(gè)是函數(shù)對(duì)象返回的值,是一個(gè)名為fun的函數(shù),在這個(gè)函數(shù)里面返回的fun函數(shù)才是這個(gè)最外層的fun函數(shù)本身。這里由于返回的fun函數(shù)引用了參數(shù)n,所以這個(gè)參數(shù)會(huì)在保留內(nèi)存中,而不會(huì)被釋放掉.
? ? ?再來看題目.? fun(0), 這里傳入了一個(gè)參數(shù)0,所以 n = 0, o = undefined, 所以打印undefined, 介質(zhì)fun(0).fun(1), 調(diào)用函數(shù)返回的fun變量,同時(shí)傳入?yún)?shù)m = 1, 所以最后返回的這樣一個(gè)函數(shù)?
? ? fun (1, 0)? ?這里執(zhí)行console.log(o), 此時(shí) o 為0, 所以打印0.? ? 然后fn是什么,fn是fun(1, 0)返回的fun變量, 所以fn.fun(2)和fn.fun(3)都是一樣會(huì)打印1.
2、css選擇器(遺忘), 要求寫出div后面的p標(biāo)簽的屬性? ? ?div +? p
3、css寫出三角形
? ? ? 這里我們是通過css的border屬性來寫出三角形,之前一直不太理解這個(gè)原理,現(xiàn)在用自己的理解來解釋這種寫法。首先來看border的作用,根據(jù)盒模型,border是盒子寬度里面的一部分。
? ? ? ?div { width: 5px; height: 5px; border: 5px solid #ccc}
這個(gè)時(shí)候div實(shí)際寬度為10px, 10px。
? ? ? ? div { width: 0; height: 0; border: 4px solid #ccc}
這個(gè)div為寬高為4px的正方形.
? ? ? ? div { width: 5px; height: 5px; border-left: 5px solid #000;border-top: 5px solid #ff0000;border-left: 5px solid #ff0000;border-left: 5px solid #000;??}

? ? ? ? 四個(gè)邊框顏色不一致的時(shí)候,效果就出來了,也就是說我們正常的border: 5px solid #ccc, 其實(shí)也是四個(gè)部分組成的,這四個(gè)邊框的具體形狀取決于盒子本身的寬度,比如
? ? ? ? div{height: 10px;width: 10px;border-left: 10px solid red;border-right: 10px solid red;border-bottom: 10px solid black;border-top: 10px solid black;}

? ? ? ? 我的理解是這個(gè)盒子本身是一個(gè)正方形,這個(gè)時(shí)候給它去添加border,是從某一個(gè)邊去引申出去的,而它的原則是到這條邊的距離是我們?cè)O(shè)置的10px solid red中的10px, 基于這個(gè)原則,最后我們看到的總是一個(gè)規(guī)則的方形,如果剛好4個(gè)距離一致則是正方形,這個(gè)原則同時(shí)也是基于盒模型的,一個(gè)盒子的寬度/寬度=? width/height + border + margin + padding。。再來看上面那個(gè)當(dāng)div的寬高為0時(shí),所以div只是一個(gè)點(diǎn),這個(gè)時(shí)候border就是從這個(gè)點(diǎn)引申出去。
? ? ? ?在知道了這些的情況下,我們就可以寫出一個(gè)三角形了,?div{height: 0px;width: 0px;border-left: 10px solid transparent;border-right: 10px solid transparent;border-bottom: 10px solid red;}, 只給border-left一個(gè)值,將border-top和border-bottom設(shè)置值并且將顏色設(shè)為透明,這樣他們的部分就隱藏掉了。

? 4、如何從1000萬個(gè)數(shù)里面挑選出前100最大的數(shù)
? ? 這里涉及到算法方面的問題,因?yàn)閷?duì)算法不是很專業(yè),所以也只是想出了一種類似二分法的解決方案,
????(1) 遞歸對(duì)所有數(shù)據(jù)分成[a,b)b(b,d]兩個(gè)區(qū)間,(b,d]區(qū)間內(nèi)的數(shù)都是大于[a,b)區(qū)間內(nèi)的數(shù)
????(2) 對(duì)(b,d]重復(fù)(1)操作,直到最右邊的區(qū)間個(gè)數(shù)小于100個(gè)。注意[a,b)區(qū)間不用劃分
????(3) 返回上一個(gè)區(qū)間,并返回此區(qū)間的數(shù)字?jǐn)?shù)目。接著方法仍然是對(duì)上一區(qū)間的左邊進(jìn)行劃分,分為[a2,b2)b2(b2,d2]兩個(gè)區(qū)間,?。╞2,d2]區(qū)間。如果個(gè)數(shù)不夠,繼續(xù)(3)操作,如果個(gè)數(shù)超過100的就重復(fù)1操作,直到最后右邊只有100個(gè)數(shù)為止。?
5、已知有一個(gè)排序好的數(shù)組和給定的一個(gè)數(shù)字x, 要得到其中數(shù)組中兩個(gè)元素,滿足這兩個(gè)元素的和為x,要求算法時(shí)間復(fù)雜度為O(n), n為數(shù)組長(zhǎng)度.
? ? var arr = [0, 1,2,3,4,5,6,7]
? ? 1、可以直接循環(huán)遍歷數(shù)組arr, 判斷arr.indexOf(x - arr[i]) > -1,? 這樣的話算法時(shí)間復(fù)雜度最大為O(n)
? ? 2、如果不用indexOf內(nèi)置函數(shù)去判斷的話怎么做?
? ? ? ? 因?yàn)閿?shù)組時(shí)順序的,所以可以由前后向中間遍歷,一前一后兩個(gè)指針來找到兩個(gè)數(shù)的和等于x。
6、要求有這樣一個(gè)后退按鈕,從b頁(yè)面返回到a頁(yè)面的時(shí)候讓a頁(yè)面達(dá)到緩存效果。
? ? ?用keep-alive結(jié)合路由中meta設(shè)置變量,在b頁(yè)面監(jiān)聽beforeRouterEnter, 當(dāng)上一個(gè)頁(yè)面時(shí)a頁(yè)面時(shí)改變變量值,在a頁(yè)面里面activated函數(shù)中判斷當(dāng)滿足條件時(shí)不重新加載數(shù)據(jù),否則加載數(shù)據(jù)。