乐趣区

关于前端:几道-JavaScript-Quiz-解析

几道常见面试 JavaScript Quiz 解析

作者: 三万三

豆皮粉儿,又见面啦!明天字节跳动数据平台的 ” 三万三 ” 面试官给大家带来一篇 JavaScript Quiz 问题解析,在筹备面试的小伙伴们,连忙一起来退出测试吼!!!

测试问题起源: http://perfectionkills.com/ja…
举荐读者先去下面链接测试得分,再看上面的解析,看看你和作者(字节常驻面试官)有什么了解差别哦

1

  (function(){return typeof arguments;})();
  • “object”
  • “array”
  • “arguments”
  • “undefined”

arguments 是个类数组对象,所以会返回 ‘object’,对于 arguments 还有几个注意事项:

  1. arguments 有 length 属性,然而没有其余数组的办法比方 pop, push 等,能够用 Array.from(arguments) 或者 […arguments] 把它转化为实在的数组
  2. 箭头函数外部没有 arguments 这个对象
  3. 如果条件容许,优先思考应用 rest parameter 语法
  4. 严格模式下 arguments 的行为会有一些变动

2

 var f = function g(){ return 23;};

 typeof g();
  • “number”
  • “undefined”
  • “function”
  • Error

var f = xx 是一个语句,不是一个函数表达式,函数表达式的名字只在外部可见,内部 g 是不存在的,所以执行会报错

3

(function(x){

    delete x;

    return x;

  })(1);
  • 1
  • null
  • undefined
  • Error

delete 操作符十分非凡,它能够删除对象的属性,然而无奈删除变量,比方

var x = 1;

delete x; // false

x; // 1

所以这里 x 是删除不掉的,返回还是 1,对于 delete 更具体的能够看这里 http\://perfectionkills.com/understanding-delete/

4

var y = 1, x = y = typeof x;

x;
  • 1
  • “number”
  • undefined
  • “undefined”

赋值运算符从右往左执行,所以 后果是 undefined

5

(function f(f){return typeof f();

})(function(){return 1;});
  • “number”
  • “undefined”
  • “function”
  • Error

这一题比较简单,看清楚是哪个 f 就能够了,函数外部的 f 是传递进去的参数 f,而传递进去的函数执行完返回 1,而 typeof 1 的后果是 number

6

var foo = {bar: function() {return this.baz;},

    baz: 1

};

(function(){return typeof arguments[0]();})(foo.bar);
  • “undefined”
  • “object”
  • “number”
  • “function”

这一题的要害是 foo.bar 执行时 this 的指向问题,能够先看一下上面 2 个的后果:

var foo = {bar: function() {return this.baz;},

    baz: 1

};

foo.bar(); // ??



var c = foo.bar;

c(); // ??

把 foo.bar 传递进去之后执行时,this 曾经不指向 foo 了,所以 baz 是不存在的,后果是 undefined,如果下面的代码是在 严格模式下,状况会有一些不同,能够本人试验一下

7

var foo = {bar: function(){return this.baz;},

    baz: 1

}

typeof (f = foo.bar)();
  • “undefined”
  • “object”
  • “number”
  • “function”

看了下面那个题,这个就很容易解答了

8

var f = (function f(){return "1";}, function g(){ return 2;})();

typeof f;
  • “string”
  • “number”
  • “function”
  • “undefined”

这里其实考查的是逗号表达式的值,逗号表达式以最左边的值为准,所以后果是 number,平时写代码可别手抖了

9

var x = 1;

if (function f(){}) {x += typeof f;}

 x;
  • 1
  • “1function”
  • “1undefined”
  • NaN

这个问题比较复杂,具体细节须要看标准,简略的讲 if 外面的 f 申明完就不存在了,所以后果是 “1undefined”

10

var x = [typeof x, typeof y][1];

typeof typeof x;
  • “number”
  • “string”
  • “undefined”
  • “object”

还是考查逗号表达式,后果就不言而喻了

11

(function(foo){return typeof foo.bar;})({foo: { bar: 1} });
  • “undefined”
  • “object”
  • “number”
  • Error

这个题要认真审题,留神不要踩坑就不会答错

12

(function f(){function f(){return 1;}

    return f();

    function f(){ return 2;}

  })();
  • 1
  • 2
  • Error (e.g. “Too much recursion”)
  • undefined

这个考查的是变量晋升,很简略

13

function f(){ return f;}

new f() instanceof f;
  • true
  • false

这个题考查的是 构造函数返回值的问题,如果构造函数返回的是简略值,比方 string, number,那么 new 之后返回的还是一个新的实例,然而如果构造函数返回的是 对象或者别的函数,那 new 之后返回的就是 当初的值,所以这里 instanceof 的后果很显然就得进去了

14

 with (function(x, undefined){}) length;
  • 1
  • 2
  • undefined
  • Error

这里考查 2 个知识点,with 和 函数的 length,with 语句会把代码的作用域设置到一个特定的对象上,而函数的 length 是函数申明的时候的参数的个数,所以答案就跃然纸上了 \~

The End

退出移动版