js中容易掉坑的几道面试题

今天看了几道面试题,有点易错,嗯,整理出来,大家一起看喽

1、看题:

    (function(){
        var a = b = 3;
    })();

    console.log("a defined? " + (typeof a !== 'undefined'));//a defined? false
    console.log("b defined? " + (typeof b !== 'undefined'));//b defined? true

解释:

因为声明var a = b = 3;相当于

b = 3;
var a = b;

并且var a = b; b最终成为一个全局变量(因为它不在var关键字后面),因此它仍然在作用域内,即使在封闭函数之外。

注意,在严格模式下(即,使用strict),语句var a = b = 3;会产生一个ReferenceError的运行时错误:b没有定义,从而避免了可能导致的任何头headfakes/bugs。 (这就是为什么你应该在你的代码中使用strict,一个重要的例子!)

2、看下面的题,先不要看答案,猜猜打印的结果是什么?

    var d ={};
    var arr = ["leo","donna"];
        arr.forEach(function(k) {
        d[k] = undefined;
    });
    console.log(d);
    console.log(arr);

嗯嗯,先想想…………………………………………………………………………………………………………………………………………………………

ok,公布答案:

    console.log(d);//{leo: undefined, donna: undefined}
    console.log(arr);//["leo", "donna"]

看解释如下

上面显示的代码片段在对象d上设置了两个属性。理想情况下,对具有未设置键的JavaScript对象执行的查找评估为未定义。但是运行这段代码会将这些属性标记为对象的“自己的属性”。

这是确保对象具有一组给定属性的有用策略。将该对象传递给Object.keys将返回一个包含这些设置键的数组(即使它们的值未定义)。

3、再看一个比较考眼力的题:

function foo1()
{
  return {
      bar: "hello"
  };
}
 
function foo2()
{
  return
  {
      bar: "hello"
  };
}
console.log(foo1());
console.log(foo2());

友情提示,在作答之前一定要看清题哦!

嗯、公布答案

    console.log(foo1());//{bar: "hello"}
    console.log(foo2());//undefined

有没有想到呢?坦白说,当我看到这个答案的时候,我就在想,为什么?一样一样的,为什么结果不一样?

嗯、先看解释(原文的解释很长,但我觉得关键的是下面的,而且越多,反而看不到重点)

在foo2()中遇到包含return语句的行(没有其他内容)时,会在return语句之后立即自动插入分号。

所以:第二个函数相当于:

function foo2()
{
  return ;
  {
      bar: "hello"
  };
}

这么看,确实返回undefined,所以我们自己写代码的时候也要注意哦

4、再看一个容易掉坑的题:

var length = 10;
function fn() {
    console.log(this.length);
}

var obj = {
  length: 5,
  method: function(fn) {
    fn();
    arguments[0]();
  }
};

obj.method(fn, 1);

猜猜看,结果是什么?10,5?……………………no no no

正确答案为:10   2

一脸懵?哈哈, 且看解释(只提炼关键解释)

返回10就没什么好疑问了,如果不会,那就要好好看看基础了。主要解释的是为什么结果是2

我们知道我们可以使用arguments []数组访问JavaScript函数中的任意数量的参数。
因此arguments[0]只不过是调用fn()。在fn里面,这个函数的作用域成为参数数组,并且记录参数[]的长度将返回2。


如果有什么不懂的,或者,想要了解更多,请看:http://web.jobbole.com/94523/





发布了256 篇原创文章 · 获赞 177 · 访问量 65万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 创作都市 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览