7個去偽存真的JavaScript面試題

才智咖 人氣:5.18K

1.建立JavaScript物件的兩種方法是什麼?

7個去偽存真的JavaScript面試題

這是一個非常簡單的問題,如果你用過JavaScript的話。你至少得知道一種方法。但是,儘管如此,根據我的經驗,也有很多自稱

JavaScript程式設計師的人說不知道如何回答這個問題。

使用“new”關鍵字來呼叫函式。

open/close花括號。

var o = {};

你也可以繼續提問,“使用new關鍵字,什麼情況下建立物件?”但是,由於我只是想淘汰一些人,所以這些問題我會等到真正面試的時候去問。

2.如何建立陣列?

這和“如何建立物件”是相同級別的問題。然而,也有一些人回答得了第一個問題,卻不能回答這個問題。

用下面的程式碼,簡簡單單就能建立一個數組:

var myArray = new Array();

建立陣列是一個很複雜的過程。但是我希望能從應聘者口中聽到使用方括號的答案。

var myArray = [];

當然,我們還可以繼續問其他問題,比如如何高效地刪除JavaScript陣列中的.重複元素等,但是由於我們只需要知道應聘人員是否值得進一步的觀察,關於陣列的問題我會到此結束。

3.什麼是變數提升(Variable Hoisting)?

這個問題稍微難一點,我也並不要求對方一定得回答出來。但是,通過這個問題能夠快速確定應聘者的技術水平:他們是否真的像他們宣告得那樣理解這門程式語言?

變數提升指的是,無論是哪裡的變數在一個範圍內宣告的,那麼JavaScript引擎會將這個宣告移到範圍的頂部。如果在函式中間宣告一個變數,例如在某一行中賦值一個變數:

function foo()

{

// 此處省略若干程式碼

var a = "abc";

}

實際上會這樣執行程式碼:

function foo()

{

var a;

// 此處省略若干程式碼

a = "abc";

}

4.全域性變數有什麼風險,以及如何保護程式碼不受干擾?

全域性變數的危險之處在於其他人可以建立相同名稱的變數,然後覆蓋你正在使用的變數。這在任何語言中都是一個令人頭疼的問題。

預防的方法也有很多。其中最常用的方法是建立一個包含其他所有變數的全域性變數:

var applicationName = {};

然後,每當你需要建立一個全域性變數的時候,將其附加到物件上即可。

riable = "abc";

還有一種方法是將所有的程式碼封裝到一個自動執行的函式中,這樣一來,所有宣告的變數都宣告在該函式的範圍內。

(function(){

var a = "abc";

})();

在現實中,這兩種方法你可能都會用到。

5.如何通過JavaScript物件中的成員變數迭代?

for(var prop in obj){

// bonus points for hasOwnProperty

if(wnProperty(prop)){

// do something here

}

}

6.什麼是閉包(Closure)?

閉包允許一個函式定義在另一個外部函式的作用域內,即便作用域內的其他東西都消失了,它仍可以訪問該外部函式內的變數。如果應聘者能夠說明,在for/next迴圈中使用閉包卻不宣告變數來儲存迭代變數當前值的一些風險,那就應該給對方加分。

7.請描述你經歷過的JavaScript單元測試。

關於這個問題,其實我們只是想看看應聘人員是否真的做過JavaScript單元測試。這是一個開放式問題,沒有特定的正確答案,不過對方至少得能講述程序中的一些事情。