http://perfectionkills.com/javascript-quiz/

https://www.zhihu.com/question/34079683

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

1.

(function(){
    return typeof arguments;
})();

答案:"object"
arguments 是对象,虽然像数组

<img src="https://pic2.zhimg.com/d1060419e0efe0f6e02ca48a7a2e4879_b.png" data-rawwidth="276" data-rawheight="61" class="content_image" width="276">
但不是数组
<img src="https://pic1.zhimg.com/e41ea6fbe2621de55f07168f1d60b8a8_b.png" data-rawwidth="262" data-rawheight="57" class="content_image" width="262">此外,就算是数组,typeof 返回的也是 "object"

2.

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

答案:Error
g 未定义。

在 JS 里,声明函数只有 2 种方法:
第 1 种: function foo(){...} (函数声明)
第 2 种: var foo = function(){...} (等号后面必须是匿名函数,这句实质是函数表达式)

除此之外,类似于 var foo = function bar(){...} 这样的东西统一按 2 方法处理,即在函数外部无法通过 bar 访问到函数,因为这已经变成了一个表达式。

但为什么不是 "undefined"?
这里如果求 typeof g ,会返回 undefined,但求的是 g(),所以会去先去调用函数 g,这里就会直接抛出异常,所以是 Error。

3.

(function(x){
    delete x;
    return x;
})(1);

答案:1
delete 操作符用于删除对象的成员变量,不能删除函数的参数。

4.

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

答案:"undefined"
先定义了 y 并赋值为 1,然后将 typeof x 赋值给 y ,此时 x 未定义,故为 "undefined",最后将 y 的值赋给 x

5.

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

答案:"number"
在函数里的 f() 其实是参数的那个 f 的执行结果,所以是 typeof 1,也就是 "number"

6.

  var foo = {
    bar: function() { return this.baz; },
    baz: 1
  };
  (function(){
    return typeof arguments[0]();
  })(foo.bar);

答案:"undefined"

指出,这里的 this 指的是 arguments,经测试确实如此:

<img src="https://pic3.zhimg.com/c0b632cfebb84edc5203898efc092b7a_b.png" data-rawwidth="272" data-rawheight="110" class="content_image" width="272">注意方括号。

7.

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

答案:"undefined"
这个题我不懂,直接上

的回答:

第7题的是因为CallExpression是不带有上下文信息,this会指向global;
当你以foo.bar() 调用时,被调用的function是「MemberExpression」,而如果进行了f=foo.bar()赋值之后,那么function就会变成「CallExpression」了,因此this绑定就失效了。

8.

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

答案:"number"
只有最后面的函数会被执行。

<img src="https://pic2.zhimg.com/d5631b125543b90d274aa126d1fdac95_b.png" data-rawwidth="883" data-rawheight="98" class="origin_image zh-lightbox-thumb" width="883" data-original="https://pic2.zhimg.com/d5631b125543b90d274aa126d1fdac95_r.jpg">

9.

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

答案:"1undefined"
括号内的 function f(){} 不是函数声明,会被转换成 true ,因此 f 未定义。

10.

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

答案:"string"
第一行执行完后 x === "undefined" ,所以连续求 2 次 typeof 还是 "string"

11.

 (function(foo){
    return typeof foo.bar;
  })({ foo: { bar: 1 } });

答案:"undefined"
typeof foo.bar 中的 foo 是参数,不多解释了。

12.

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

答案:2
由于声明提前,后面的 f() 会覆盖前面的 f()

13.

function f(){ return f; }
new f() instanceof f;

答案:false

<img src="https://pic1.zhimg.com/6cda3c676c64c3225dade3994c059630_b.png" data-rawwidth="434" data-rawheight="196" class="origin_image zh-lightbox-thumb" width="434" data-original="https://pic1.zhimg.com/6cda3c676c64c3225dade3994c059630_r.jpg">
来自 @日月 的补充说明:构造函数不需要显式声明返回值,默认返回this值。当显式声明了返回值时,如果返回值是非对象(数字、字符串等),这个返回值会被忽略,继续返回this值。但是如果返回值是对象,那么这个显式返回值会被返回。
因为 f() 内部返回了自己,故此时 new f() 的结果和 f 相等。

14.

with (function(x, undefined){}) length;

答案:2
with 限定了作用域是这个函数,function.length 返回函数的参数个数,所以是 2。
来自

的备注:undefined 虽然是关键词,但可以被覆写。但 null 不能。

14 道 JavaScript 题?的更多相关文章

  1. 汤姆大叔的6道javascript编程题题解

    看汤姆大叔的博文,其中有篇(猛戳这里)的最后有6道编程题,于是我也试试,大家都可以先试试. 1.找出数字数组中最大的元素(使用Math.max函数) var a = [1, 2, 3, 6, 5, 4 ...

  2. 你应该知道的25道Javascript面试题

    题目来自 25 Essential JavaScript Interview Questions.闲来无事,正好切一下. 一 What is a potential pitfall with usin ...

  3. 44道JavaScript送命题

    很久以前看过一个老外写的帖子,JavaScript Puzzlers!,直译就是JavaScript难题,里面列举了100道JavaScript选择题,大部分都是让人摸不着头脑的题目,需要仔细琢磨一番 ...

  4. Javascript题库

    一.填空题 JavaScript有两种引用数据类型 :__数组___.__对象__. Javascript通过__setTimeout___延迟指定时间后,去执行某程序. Javascript里Str ...

  5. 【转】POJ百道水题列表

    以下是poj百道水题,新手可以考虑从这里刷起 搜索1002 Fire Net1004 Anagrams by Stack1005 Jugs1008 Gnome Tetravex1091 Knight ...

  6. CF上的3道小题(2)

    CF上的3道小题(2) T1:CF630K Indivisibility 题意:给出一个数n,求1到n的数中不能被2到9中任意一个数整除的数. 分析:容斥一下,没了. 代码: #include < ...

  7. 刷14道leetcode的总结

    引子 为什么我要刷leetcode?换工作?不是!那是?玩!巴菲特的双目标清单系统,基本方法是列两个清单,一个是职业生涯最重要的目标(不超过5个),另一个是比较重要的目标.对于比较重要的目标,要像躲避 ...

  8. 各位大佬Python的第一部分道基础题已经整理好了,希望大家面试的时候能用的上。

    Python的第一部分道基础题,希望大家面试的时候能用的上. 1.为什么学习Python? Python是目前市面上,我个人认为是最简洁.最优雅.最有前途.最全能的编程语言,没有之一. 2.通过什么途 ...

  9. [2]十道算法题【Java实现】

    前言 清明不小心就拖了两天没更了-- 这是十道算法题的第二篇了-上一篇回顾:十道简单算法题 最近在回顾以前使用C写过的数据结构和算法的东西,发现自己的算法和数据结构是真的薄弱,现在用Java改写一下, ...

随机推荐

  1. windows下解决PyCharm控制台中文输出乱码

    我用的PyCharm是2018.2版本 在调用os.system()的过程中遇到了控制台中文乱码的问题,具体如下 网上说的将两个Encoding格式都设置为UTF-8并没有解决问题,后来我将Proje ...

  2. python 实现远端ftp文件上传下载

    python 实现ftp上传下载 * 脚本需要传入两个参数,参数1为需要从远端ftp站点下载文件名称,参数2为已知需要下载的文件md5值,文件下载完成后会自动进行md5值校验 * 运行示例 [root ...

  3. CSS3实现原腾讯视频透明边框,多重边框等(关于边框那些不为人知的事情)

    1.hsla或rgba实现半透明边框. rgba在rgb的基础上增加了透明通道,就不详细说了,下面重点说下hsla: 说明: HSLA(H,S,L,A) 取值: H:Hue(色调).0(或360)表示 ...

  4. 优美的爆搜?KDtree学习

    如果给你平面内一些点,让你求距离某一个指定点最近的点,应该怎么办呢? O(n)遍历! 但是,在遍历的过程中,我们发现有一些点是永远无法更新答案的. 如果我们把这些点按照一定顺序整理起来,省略对不必要点 ...

  5. Codeforces Round #258 (Div. 2) . Sort the Array 贪心

    B. Sort the Array 题目连接: http://codeforces.com/contest/451/problem/B Description Being a programmer, ...

  6. Codeforces Round #281 (Div. 2) A. Vasya and Football 模拟

    A. Vasya and Football 题目连接: http://codeforces.com/contest/493/problem/A Description Vasya has starte ...

  7. UVALive 6912 Prime Switch 状压DP

    Prime Switch 题目连接: https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8& ...

  8. python之sys.stdout、sys.stdin

    转自:http://www.cnblogs.com/turtle-fly/p/3280519.html 本文环境:Python 2.7  使用 print obj 而非 print(obj) sys. ...

  9. Unity IOC容器通过配置实现类型映射的几种基本使用方法

    网上关于Unity IOC容器使用的方法已很多,但未能做一个总结,故我这里总结一下,方便大家选择. 首先讲一下通过代码来进行类型映射,很简单,代码如下 unityContainer = new Uni ...

  10. 78-WS2812-Library (STM32F4)

    78-WS2812-Library (STM32F4) //-------------------------------------------------------------- // File ...