摘要:去公司面試前端,給了一套題,一看,大體上不會,跟面試官說這題對我有些難,他說這是基礎,你可以走了,于是我走了。回來查了才知道原來數組就有方法。一查我再掩面而泣,原來里就帶了就可以干這活。
去XX公司面試前端,給了一套題,一看,大體上不會,跟面試官說這題對我有些難,他說這是基礎,你可以走了,于是我走了。人艱不拆啊。
但是作為一個知錯就改的好少年,我要發揚不懂就問,不懂就去研究的優良傳統。于是今天花了些時間把我有印象的題目和我的思考寫出來,按照面試官的說法是基礎,但是基礎是重中之重啊,希望可以對各位有些幫助,如果你們有機會去XX公司面試前端,這也算作前車之鑒了。
題目1 數組排序給了一個數字數組,有一位的有兩位的,讓你按照從大到小排序
基礎吧,簡單吧,但我就是不會(掩面)。回來查了才知道原來數組就有sort方法。
好吧,是不是我直接把數組sort一下就可以了呢,于是我試了一下
var arr = [11,2,28,5,8,4] arr.sort() //return [11, 2, 28, 4, 5, 8]
尼瑪,為什么11跑到2前面了,難道這個函數是按字來排序的,太不智能了吧。原來不帶參數的sort是按照字符編碼的順序進行排序的。那么從大到小要怎么寫呢?
var arr = [11,2,28,5,8,4] arr.sort(function(a,b){return a-b})
要這樣寫,為什么是這樣呢?sort的參數是一個排序函數,我們可以把參數a當作數組里靠后的元素,b當作數組里靠前的元素,排序函數return的值如果是正的,才執行排序,所以最后排下來是從小到大,相反,如果return的是b-a,那么就是從大到小排序。
題目2 數組清除重復項這是另外一道題目,數組里有重復項,要怎么清除。一查我再掩面而泣,原來js里就帶了filter就可以干這活。代碼如下:
myArray.filter(function(elem, pos,self){return self.indexOf(elem)== pos;})
filter是過濾的意思,filter通過一個函數的參數來選擇什么項需要被filter掉,函數返回true保留,false干掉。
函數參數帶三個參數,第一個elem是這一項元素,第二個pos是這一項所在的位置,第三個self指的是執行filter的數組。那么,你看,巧妙嗎:self.indexOf(elem) 是指這個項目在數組中的位置,位置是第一個,也就是說同樣的項目在第一位和第5位都出現了,他返回的是0,而此時pos還是4,所以通過self.indexOf(elem) == pos 能判斷出這一項是不是重復出現的項,如果是(返回false),則干掉它。
題目3 閉包和++這題我真不好意思說,丟人,我先寫出來吧:
function a(x){ return function b(y){ return y+x++ } } var a1 = a(10) var a2 = a(20) a1(10) a2(10)
問后面兩個值。我一看這不是考閉包嗎,幸虧我有點復習,就是說x被帶進去了,跟里面的匿名函數創建了一個閉包,所以一個是10,一個20。這都沒問題,下面一個值++,再加上10,好嘛,++優先級顯然大于+,所以10+1 = 11 再加10,一個等于21,一個等于31.
尼瑪,回來一試我又傻掉了,a++雖然優先級算,但是他返回的還是本身啊,++a才返回加過以后的值啊。理解的太不深刻了,該打。
題目4 說一個list里面有幾個元素,讓你寫一段代碼在點擊這個元素的時候返回他在list里的index好吧,我本來還想說終于有一道可以做的題了,但后面大字寫的請使用原生javascript實現讓我蒙了,完蛋,一道都做不對。
我先是在sf里提問:
這里
然后結合朋友們的答案,自己試著寫,我開始是這么寫的:
var nodeList = document.getElementsByTagName("li"); for(var i = 0;i < nodeList.length;i++){ nodeList[i].onclick = function(){ console.log(nodeList.indexOf(nodeList[i])); } }
我的思路是把所有的li放到一個數組里,然后遍歷他,為每個元素添加事件,事件觸發數組中當前項所在的index。
但是現實無情的打擊了我,報錯,nodeList找不到indexOf方法,我幻想中的nodeList難道不是數組嗎。依然google,才知道怪不得那么多人使用那種復雜的方式聲明數組啊,方法如下:
var nodeList = Array.prototype.slice.call(document.getElementsByTagName("li"),0) ;
調用array對象的方法slice,把取得的li放進去,這樣能保證這玩意是一個數組,具有數組的一切方法。
然后我繼續執行,擦,不對循環里的i永遠是最后一項的值,不對,這不就是閉包里說的要避免的情況嗎?也就是說onclick的匿名函數和變量i之間建立起了一個閉包,而這個i是循環以后最后的那個值。
然后呢,上網搜解決辦法唄。原來解決循環閉包錯誤的辦法就是再創建一個閉包函數,結果這個函數只需要打印出循環中的i就行了,最終代碼如下:
var nodeList = Array.prototype.slice.call(document.getElementsByTagName("li"),0) ; function conIndex(i){ return function(){ console.log(i) } } for(var i = 0;i < nodeList.length;i++){ nodeList[i].onclick = conIndex(i); }
我沒有較系統的學習計算機知識,我這個人學習還有一個特點特別不喜歡用術語,從高中開始我就喜歡把知識用我理解的方式講出來,雖然一直在做前端,但是越來越發現自己的知識不夠用,對js的理解還不夠深入。我想嘛,js知識就那么多,它增長的速度只要趕不上我學習的速度,就總有一天我能把它全學會,我的目標是,下一次去面試的時候可以理直氣壯的把他們給的基礎題目完全搞定!
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/78012.html
摘要:美團點評面試實習經歷回想總結一下美團實習經歷給想去美團的小伙伴一些參考順便積累點人品面試兩輪技術面一輪不刷人的月份的時候內推了美團實習簡歷估計太水了沒等到面試機會四月的時候在美團的學長幫推了簡歷直接給了幾天后接到電話面試三天順利完成兩輪技術 2017美團點評面試實習經歷 回想總結一下美團實習經歷,給想去美團的小伙伴一些參考.順便積累點人品. 面試 兩輪技術面+一輪不刷人的HR3月份的...
摘要:美團點評面試實習經歷回想總結一下美團實習經歷給想去美團的小伙伴一些參考順便積累點人品面試兩輪技術面一輪不刷人的月份的時候內推了美團實習簡歷估計太水了沒等到面試機會四月的時候在美團的學長幫推了簡歷直接給了幾天后接到電話面試三天順利完成兩輪技術 2017美團點評面試實習經歷 回想總結一下美團實習經歷,給想去美團的小伙伴一些參考.順便積累點人品. 面試 兩輪技術面+一輪不刷人的HR3月份的...
摘要:失業的兩周真的也是爽啊,每天打打球,去面試面試,當作逛街。為什么走我一定是瘋了,我才辭職的吧。我一直覺得工作是自己喜歡,不是因為生活所迫。錢,只是說能力的體現。但是不忘初心,善始善終,生活才剛剛開始啊。。。? 失業的第二周,一邊玩的很開心一邊又擔心工作,一邊投簡歷一邊面試,一邊嫌棄廠太小不想去,一邊大廠又沒有消息,糾結糾結。 ? 從大一暑假邊上課邊工作到后來全職工作,其中寒暑假無休,畢業跟實...
摘要:自我沉淀工作有周報月總結季度年終等各種總結,那么自我學習呢也一樣,今天寫下的點滴,就是對明天的自己最好的饋贈禮物。 showImg(https://segmentfault.com/img/bVbm9ZZ?w=1008&h=298); 前言 歲月不居,時節如流,轉眼間都到2019年1月中旬了,時間過的好快,說好的周末睡到自然醒,但還是跟以往一樣,到上班時間就醒了,這算不算心里只有工作呢...
閱讀 951·2021-09-27 13:36
閱讀 907·2021-09-08 09:35
閱讀 1077·2021-08-12 13:25
閱讀 1447·2019-08-29 16:52
閱讀 2918·2019-08-29 15:12
閱讀 2737·2019-08-29 14:17
閱讀 2625·2019-08-26 13:57
閱讀 1022·2019-08-26 13:51