下麵舉例14道前端面試題選擇題(摘自妙味課堂) 1、 選項:A、object B、array C、arguments D、undefined 解析:arguments即是實參的集合,又稱類數組對象。他的類型是對象object。因此選A。 2、 選項:A、number B、undefined C、fu ...
下麵舉例14道前端面試題選擇題(摘自妙味課堂)
1、
(function(){ return typeof arguments; })()
選項:A、object B、array C、arguments D、undefined
解析:arguments即是實參的集合,又稱類數組對象。他的類型是對象object。因此選A。
2、
var f = function g(){return 23;}; typeof g();
選項:A、number B、undefined C、function D、error
解析:此函數是有名函數表達式,嚴格來說是不規範的。並且函數調用是 f(),而不是g(),g只在函數內部可以使用,其他地方使用都是不規範的。因此選D。
3、
(function(x){ delete x; return x; })(1)
選項:A、1 B、null C、undefined D、error
解析:此題考察delete的用法,delete是一元操作符,只能刪除對象里的屬性,或數組裡的元素。不能刪除變數、函數和函數的參數。就像遞增、遞減、賦值運算符一樣,delete也是有副作用的,它是用來做刪除操作,不是用來返回一個值的。
4、
var y = 1, x = y = typeof x; x;
選項:A、1 B、"number" C、undefined D、"undefined"
解析:此題考查 = 賦值運算符。賦值運算符是從右往左賦值的。因此選D。
5、
(function f(f){ return typeof f(); })(function(){return 1;})
選項:A、"number" B、"undefined" C、"function" D、error
解析:形參是 f,typeof f() ,這個 f 是形參,這裡調用的是實參里的函數 。等於執行一次函數。執行函數返回的是一個值,就是1。所以類型是 number 。因此選A。註意:運行時會報錯,不知道為什麼?求大神解釋!
6、
var foo = { bar: function(){return this.baz;}, baz:1 }; (function(){ return typeof arguments[0]() })(foo.bar);
選項:A、"undefined" B、"object" C、"number" D、"function"
解析:此題主要考查this用法,和傳參,作用域。開始的時候 this 指向 foo,但是閉包里 arguments[0] 指的是實參 foo.bar ,arguments[0]() 調用時 this 指向的是 window,window.baz 是不存在的。this 不看在哪裡定義,而是看在哪裡執行,看是誰在執行。因此選A。
7、
var foo = { bar : function (){ return this.baz }, baz : 1 } typeof (f = foo.bar)();
選項:A、"undefined" B、"object" C、"number" D、"function"
解析:此題跟上面一個是類似的。正常情況下,this 指向的是 foo 。但是 foo.bar 賦值給了 f ,this 還是會指向 window 。所以選 A 。
8、
var f = (function f(){ return "1"; }, function g(){ return 2;})(); typeof f;
選項:A、"string" B、"function" C、"number" D、"undefined"
解析:( a , b , c )是分組選擇符,執行時只執行最後一個,可以測試,變數 f 就是 2 。所以選擇 C 。
9、
var x = 1; if(function f(){}){ x += typeof f; } x;
選項:A、1 B、"1function" C、"1undefined" D、NaN
解析:首先函數聲明不允許寫在運算當中,例如 if 判斷,for 迴圈等。但是這樣寫也不會報錯,返回的是 true ,所以 if 語句會被執行 。其次函數名 f 不能在外部找到,它是局部作用域。因此選 C 。
10、
var x = [ typeof x,typeof y ][1]; typeof typeof x;
選項:A、"number" B、"string" C、"underfined" D、"object"
解析:本題有點迷惑人,不管變數 x 的值是什麼,typeof x 肯定是字元串,字元串的類型肯定是 “string” 。
11、
(function(foo){ return typeof foo.bar; })({ foo:{bar:1} });
選項:A、"underfined" B、"object" C、"number" D、error
解析:foo 是形參,{ foo: { bar:1 } }是實參,實參 . bar 是不存在的 。
12、
(function f(){ function f(){ return 1; }; return f(); function f(){ return 2; }; })()
選項:A、1 B、2 C、error D、undefined
解析:本題考查函數預解析,其實函數在所有內容都沒有解析之前,就已經預解析過了,而第二個函數會把第一個覆蓋,當return f() 時,肯定是調用第二個函數。因此選 B 。
13、
function f(){ return f; } new f() instanceof f;
選項:A、true B、false
解析:正常情況下,構造函數是 f 的實例化,但是 f() == f , 所以 f instanceof f 就沒有意義,返回false。
14、
with (function (x , underfined){}) length;
選項:A、1 B、2 C、undefined D、error
解析:with語句拖慢代碼性能,儘量避免使用。函數的 length 就是形參的 length 。undefined 也可以是形參 。因此選 B 。