前端面试题解析

下面举例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 。 

 

posted @ 2017-10-16 22:03  雨平  阅读(321)  评论(2编辑  收藏  举报