前端面试题解析
下面举例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 。