7個(gè)去偽存真的JavaScript面試題

譯文鏈接:http://www.codeceo.com/article/7-javascript-interview-qa.html
英文原文:7 JavaScript Interview Questions to Weed Out Imposters
翻譯作者:碼農(nóng)網(wǎng) – 小峰

上周穗泵,我發(fā)表了《C#程序員的7個(gè)面試問題》。這次我要說的是如何淘汰那些濫竽充數(shù)的JavaScript程序員踱蠢。

你會(huì)驚訝于居然有這么多人來面試工作火欧,并且他們的簡(jiǎn)歷描述得都貌似很牛逼的樣子。但是如果你問他們相關(guān)問題的話茎截,你就會(huì)發(fā)現(xiàn)他們對(duì)此一無所知苇侵。我不知道他們這些簡(jiǎn)歷是真的還是只是一個(gè)噱頭。所以和其他面試官一樣企锌,我也有我的一套方法首先確保面試的人是值得我去面試的——我可以在半小時(shí)內(nèi)通過電話搞定榆浓。

因此,如果有些你認(rèn)為應(yīng)該有的問題卻不在我的7個(gè)問題中撕攒,那可能是因?yàn)槲覍⑺诺搅撕竺娴拿嬖嚟h(huán)節(jié)里陡鹃。

此外烘浦,我想對(duì)那些可能會(huì)認(rèn)為技術(shù)面試,并不能真正說明程序員是否真的優(yōu)秀的人說……

你是對(duì)的萍鲸。當(dāng)我還是一個(gè)年輕的程序員時(shí)闷叉,如果面試技術(shù)問題,我也有同樣的感覺脊阴。但現(xiàn)在握侧,我成了面試官,我覺得這種方式嘿期,至少能證明那些通過技術(shù)面試的人比那些不能通過的人品擎,是優(yōu)秀程序員的可能性要大得多。

最后备徐,我想說的是萄传,我不會(huì)因?yàn)閼?yīng)聘者答錯(cuò)三兩個(gè)問題或不按我預(yù)想地回答就將他們pass掉。但是蜜猾,如果大多數(shù)問題對(duì)方都回答不出來的話秀菱,那我就會(huì)在心里給他亮起紅燈!

下面這7個(gè)JavaScript面試問題是你應(yīng)該在面試前先問的瓣铣。否則答朋,很有可能會(huì)浪費(fèi)你的時(shí)間贷揽。

1.創(chuàng)建JavaScript對(duì)象的兩種方法是什么棠笑?

這是一個(gè)非常簡(jiǎn)單的問題,如果你用過JavaScript的話禽绪。你至少得知道一種方法蓖救。但是,盡管如此印屁,根據(jù)我的經(jīng)驗(yàn)循捺,也有很多自稱是JavaScript程序員的人說不知道如何回答這個(gè)問題。

  • 使用“new”關(guān)鍵字來調(diào)用函數(shù)雄人。
  • open/close花括號(hào)从橘。
var o = {};

你也可以繼續(xù)提問,“使用new關(guān)鍵字础钠,什么情況下創(chuàng)建對(duì)象恰力?”但是,由于我只是想淘汰一些人旗吁,所以這些問題我會(huì)等到真正面試的時(shí)候去問踩萎。

2.如何創(chuàng)建數(shù)組?

這和“如何創(chuàng)建對(duì)象”是相同級(jí)別的問題很钓。然而香府,也有一些人回答得了第一個(gè)問題董栽,卻不能回答這個(gè)問題。

用下面的代碼企孩,簡(jiǎn)簡(jiǎn)單單就能創(chuàng)建一個(gè)數(shù)組:

var myArray = new Array();

創(chuàng)建數(shù)組是一個(gè)很復(fù)雜的過程锭碳。但是我希望能從應(yīng)聘者口中聽到使用方括號(hào)的答案。

var myArray = [];

當(dāng)然勿璃,我們還可以繼續(xù)問其他問題工禾,比如如何高效地刪除JavaScript數(shù)組中的重復(fù)元素等,但是由于我們只需要知道應(yīng)聘人員是否值得進(jìn)一步的觀察蝗柔,關(guān)于數(shù)組的問題我會(huì)到此結(jié)束闻葵。

3.什么是變量提升(Variable Hoisting)?

這個(gè)問題稍微難一點(diǎn)癣丧,我也并不要求對(duì)方一定得回答出來槽畔。但是,通過這個(gè)問題能夠快速確定應(yīng)聘者的技術(shù)水平:他們是否真的像他們聲明得那樣理解這門編程語言胁编?

變量提升指的是厢钧,無論是哪里的變量在一個(gè)范圍內(nèi)聲明的,那么JavaScript引擎會(huì)將這個(gè)聲明移到范圍的頂部嬉橙。如果在函數(shù)中間聲明一個(gè)變量早直,例如在某一行中賦值一個(gè)變量:

function foo()
{
    // 此處省略若干代碼
    var a = "abc";
}

實(shí)際上會(huì)這樣運(yùn)行代碼:

function foo()
{
    var a;
    // 此處省略若干代碼
    a = "abc";
}

4.全局變量有什么風(fēng)險(xiǎn),以及如何保護(hù)代碼不受干擾市框?

全局變量的危險(xiǎn)之處在于其他人可以創(chuàng)建相同名稱的變量霞扬,然后覆蓋你正在使用的變量。這在任何語言中都是一個(gè)令人頭疼的問題枫振。

預(yù)防的方法也有很多喻圃。其中最常用的方法是創(chuàng)建一個(gè)包含其他所有變量的全局變量:

var applicationName = {};

然后,每當(dāng)你需要?jiǎng)?chuàng)建一個(gè)全局變量的時(shí)候粪滤,將其附加到對(duì)象上即可斧拍。

applicationName.myVariable = "abc";

還有一種方法是將所有的代碼封裝到一個(gè)自動(dòng)執(zhí)行的函數(shù)中,這樣一來杖小,所有聲明的變量都聲明在該函數(shù)的范圍內(nèi)肆汹。

(function(){
   var a = "abc";
})();

在現(xiàn)實(shí)中,這兩種方法你可能都會(huì)用到予权。

5.如何通過JavaScript對(duì)象中的成員變量迭代昂勉?

for(var prop in obj){
    // bonus points for hasOwnProperty
    if(obj.hasOwnProperty(prop)){
        // do something here
    }
}

6.什么是閉包(Closure)?

閉包允許一個(gè)函數(shù)定義在另一個(gè)外部函數(shù)的作用域內(nèi)伟件,即便作用域內(nèi)的其他東西都消失了硼啤,它仍可以訪問該外部函數(shù)內(nèi)的變量。如果應(yīng)聘者能夠說明,在for/next循環(huán)中使用閉包卻不聲明變量來保存迭代變量當(dāng)前值的一些風(fēng)險(xiǎn)谴返,那就應(yīng)該給對(duì)方加分煞肾。

7.請(qǐng)描述你經(jīng)歷過的JavaScript單元測(cè)試。

關(guān)于這個(gè)問題嗓袱,其實(shí)我們只是想看看應(yīng)聘人員是否真的做過JavaScript單元測(cè)試籍救。這是一個(gè)開放式問題,沒有特定的正確答案渠抹,不過對(duì)方至少得能講述進(jìn)程中的一些事情蝙昙。

歡迎大家補(bǔ)充。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末梧却,一起剝皮案震驚了整個(gè)濱河市奇颠,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌放航,老刑警劉巖烈拒,帶你破解...
    沈念sama閱讀 211,265評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異广鳍,居然都是意外死亡荆几,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門赊时,熙熙樓的掌柜王于貴愁眉苦臉地迎上來吨铸,“玉大人,你說我怎么就攤上這事祖秒〉ǎ” “怎么了?”我有些...
    開封第一講書人閱讀 156,852評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵狈涮,是天一觀的道長狐胎。 經(jīng)常有香客問我鸭栖,道長歌馍,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,408評(píng)論 1 283
  • 正文 為了忘掉前任晕鹊,我火速辦了婚禮松却,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘溅话。我一直安慰自己晓锻,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,445評(píng)論 5 384
  • 文/花漫 我一把揭開白布飞几。 她就那樣靜靜地躺著砚哆,像睡著了一般。 火紅的嫁衣襯著肌膚如雪屑墨。 梳的紋絲不亂的頭發(fā)上躁锁,一...
    開封第一講書人閱讀 49,772評(píng)論 1 290
  • 那天纷铣,我揣著相機(jī)與錄音,去河邊找鬼战转。 笑死搜立,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的槐秧。 我是一名探鬼主播啄踊,決...
    沈念sama閱讀 38,921評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼刁标!你這毒婦竟也來了颠通?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,688評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤膀懈,失蹤者是張志新(化名)和其女友劉穎蒜哀,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體吏砂,經(jīng)...
    沈念sama閱讀 44,130評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡撵儿,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,467評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了狐血。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片淀歇。...
    茶點(diǎn)故事閱讀 38,617評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖匈织,靈堂內(nèi)的尸體忽然破棺而出浪默,到底是詐尸還是另有隱情,我是刑警寧澤缀匕,帶...
    沈念sama閱讀 34,276評(píng)論 4 329
  • 正文 年R本政府宣布纳决,位于F島的核電站,受9級(jí)特大地震影響乡小,放射性物質(zhì)發(fā)生泄漏阔加。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,882評(píng)論 3 312
  • 文/蒙蒙 一满钟、第九天 我趴在偏房一處隱蔽的房頂上張望胜榔。 院中可真熱鬧,春花似錦湃番、人聲如沸夭织。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽尊惰。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間弄屡,已是汗流浹背戴卜。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評(píng)論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留琢岩,地道東北人投剥。 一個(gè)月前我還...
    沈念sama閱讀 46,315評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像担孔,于是被迫代替她去往敵國和親江锨。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,486評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法糕篇,類相關(guān)的語法啄育,內(nèi)部類的語法,繼承相關(guān)的語法拌消,異常的語法挑豌,線程的語...
    子非魚_t_閱讀 31,598評(píng)論 18 399
  • *面試心聲:其實(shí)這些題本人都沒怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個(gè)offer,總結(jié)起來就是把...
    Dove_iOS閱讀 27,130評(píng)論 30 470
  • 高三那年畢業(yè),在廣東打暑期工墩崩,高強(qiáng)度的作業(yè)讓我一度想回家氓英,有一次偶然間抬頭望了望天空,從此愛上了廣東那翻滾的云 3...
    走馬47閱讀 358評(píng)論 3 4