JavaScript变态题目
刚才发现的一些变态的 JavaScript 题目,做了一下,只对了一半,特此发到园子里,和友友们分享一下。这些题目都是针对 Ecmascript 第三版的,原题里面全部都是选择题,有备选答案,这里我把答案都去掉了,因为有的题目如果不看答案,你反而知道为什么,看了答案你却迟疑了,所以,直接来做吧,给自己一点自信,相信自己!
//题目 1
(function(){
return typeof arguments;
})();
//题目 2
var f = function g(){ return 23; };
typeof g();
//题目 3
(function(x){
delete x;
return x;
})(1);
//题目 4
var y = 1, x = y = typeof x;
x;
//题目 5
(function f(f){
return typeof f();
})(function(){ return 1; });
//题目 6
var foo = {
bar: function() { return this.baz; },
baz: 1
};
(function(){
return typeof arguments[0]();
})(foo.bar);
//题目 7
var foo = {
bar: function(){ return this.baz; },
baz: 1
}
typeof (f = foo.bar)();
//题目 8
var f = (function f(){ return "1"; }, function g(){ return 2; })();
typeof f;
//题目 9
var x = 1;
if (function f(){}) {
x += typeof f;
}
x;
//题目 10
var x = [typeof x, typeof y][1];
typeof typeof x;
//题目 11
(function(foo){
return typeof foo.bar;
})({ foo: { bar: 1 } });
//题目 12
(function f(){
function f(){ return 1; }
return f();
function f(){ return 2; }
})();
//题目 13
function f(){ return f; }
new f() instanceof f;
//题目 14
with (function(x, undefined){}) length;
怎么样,是不是感觉有些棘手,先仔细思考一下吧,继续往下拉可以看到答案。
1.这一题如果理解了 arguments 到底是个什么东西,就知道答案是什么了。原题里面,疑惑的答案有两个:"object", "array"。准确答案是:"object" ,虽然 arguments 可以采用数组下标的方式来使用,但是它不是数组,而且,typeof 的返回值里面,从来都不会有 array
2.这一题的答案是:会报错。要弄懂这一题,需要知道 function 的作用。在 JavaScript 里面,function 有两个作用,一是作为函数声明,这个想必都可以理解,声明函数时,函数会被提升到当前代码的最顶端(被称作函数提升);二是作为函数表达式,比如:
var f = function test(){}
此时,test 是可选的,如果加上 test ,并不会出现函数提升效果,test只是作为当前函数表达式的一个内部属性(f.name)
3.这一题的答案是:1 。函数中的 delete 并没有生效,在函数内部,delete 无法删除形参,删除时也不会报错,所以 x 依旧是 x 。如果确实要删除 x,使用 undefined 取消它的值吧
4.这一题的答案是:undifined 。赋值符号 = 具有右结合性,执行代码的时候,先执行右边的代码,再执行左边的代码。所以 typeof x 是 undifined ,于是 x = y = undefined
5.这一题的答案是:“number"。这个比较有疑惑性。函数接受本身作为自己的参数,然后调用,此时就看谁更具有更高的优先级了,显然,参数的优先级更高,所以实际执行的是:return typeof 1;
6.这一题的答案是 ”undefined"。这道题个人觉得有点疑惑,测试的 this 的用法。虽然 foo.bar 传递给了函数,但是真正执行的时候,函数 bar 的上下文环境是 arguments ,并不是 foo,arguemnts[0] 可以理解为 arguments.0(不过写代码就不要这样了,语法会错误的),所以这样看来,上下文环境是 arguemnts 就没问题了
7.这一题的答案还是: “undefined"。对 foo.bar 来说,执行的时候上下文是 foo,但是当 把 foo.bar 赋值给 f 的时候,f 的上下文环境是 window ,是没有 baz 的,所以是 ”undefined"
8.这一题的答案是:”number"。这道题测试的逗号表达式的语法,不详细说了,不懂的话看下资料吧。
9.这一题的答案是:“1undefined"。理解这一题的关键与第 2 题类似,不懂的多看看第二题吧。
10.这一题的答案是:"string"。typeof 的结果一定是字符串。所以对字符串 再次 typeof ,肯定是 "string“ 了
11.这一题的答案是:"undefined"。太具有迷惑性了,纯文字游戏。形参 foo = {foo:{bar:1}} ,不存在 foo.baz ,所以结果是:”undefined"
12.这一题的答案是:2 。函数提升了两次,第二次把第一次覆盖了,所以 return 后面的 f 是 return 语句的下一条语句声明的函数 f 。注意自执行函数 (function f (){})(); 中的 f 并没有函数提升效果,它是表达式
13.这一题的答案是:false。构造函数本身在 new 的过程中会返回一个表示该对象的实例。但是函数的返回值覆盖了这个实例,所以答案是 false。话说,这个真的有点变态………………
14.这一题的答案是:2 。这道题开始是我在百度知道上面回答问题时看见的,一开始觉得写错了,后来问了一下,把这个变态题的网址给问出来了,然后没有看答案,研究了一下,才知道为什么。with的用法是这样的:with(object) {},在大括号里面,可以引用object的属性而不用使用object.attr这种形式。这道题里面,with接受了一个对象,只不过这个对象是函数,函数有length属性,代表形参的个数,所以上面返回的值是2
JavaScript变态题目的更多相关文章
- 44个 Javascript 变态题解析 (下)
承接上篇 44个 Javascript 变态题解析 (上) 第23题 [1 < 2 < 3, 3 < 2 < 1] 这个题也还可以. 这个题会让人误以为是 2 > 1 & ...
- 自家人不认识自家人——考你一道有趣的Javascript小题目
今天的内容很简单,给大家分享一个有趣的Javascript小题目. 题目很简单,就是填空: var a = ______; var b = a; alert(a==b); // alert " ...
- 44个 Javascript 变态题解析 (上\下)
第1题 ["1", "2", "3"].map(parseInt) 知识点: Array/map Number/parseInt JavaS ...
- 44 个 JavaScript 变态题解析
当初笔者做这套题的时候不仅怀疑智商, 连人生都开始怀疑了…. 不过, 对于基础知识的理解是深入编程的前提. 让我们一起来看看这些变态题到底变态不变态吧! 第1题 ["1", &qu ...
- Javascript 变态题解析
读者可以先去做一下感受感受. 当初笔者的成绩是 21/44... 当初笔者做这套题的时候不仅怀疑智商, 连人生都开始怀疑了.... 不过, 对于基础知识的理解是深入编程的前提. 让我们一起来看看这些变 ...
- 44个javascript 变态题解析
原题来自: javascript-puzzlers 读者可以先去做一下感受感受. 当初笔者的成绩是 21/44… 当初笔者做这套题的时候不仅怀疑智商, 连人生都开始怀疑了…. 不过, 对于基础知识的理 ...
- 44个 Javascript 变态题解析
原题来自: http://javascript-puzzlers.herokuapp.com/ 读者可以先去做一下感受感受. 当初笔者的成绩是 21/44... 当初笔者做这套题的时候不仅怀疑智商, ...
- 44个 Javascript 变态题解析 (上)
原题来自: javascript-puzzlers(http://javascript-puzzlers.herokuapp.com/) 读者可以先去做一下感受感受. 当初笔者的成绩是 21/44… ...
- JS夯实基础:Javascript 变态题解析 (上)
["].map(parseInt) 1.知识点: Array/map Number/parseInt Global_Objects/parseInt JavaScript parseInt ...
随机推荐
- Python %操作符 字符串格式化
%操作符(字符串格式化,string formatting),说明如下: %[(name)][flags][width].[precision]typecode (name)为命名 flags可以有+ ...
- Ubuntu16.04 解决matplotlib乱码或者中文显示不了的问题(可用)
一. 下载字体 SimHei.ttf 复制到linux字体库中 sudo cp ~/SimHei.ttf /usr/share/fonts/SimHei.ttf 二.查看matplotlib配置 In ...
- 在Java中发送http的post请求,设置请求参数等等
前几天做了一个定时导入数据的接口,需要发送http请求,第一次做这种的需求,特地记一下子, 导包 import java.text.SimpleDateFormat;import java.util. ...
- ps加强总结
快捷键 1.ctrl+alt+z返回 2.ctrl+z撤销 3.ctrl+s保存 4.ctrl+shift+s另存为 5.shift是有序的选择 ctrl键是无序的选择 6.ctrl+g打组 ...
- [Doctrine Migrations] 数据库迁移组件的深入解析四:集成diff方式迁移组件
场景及优势 熟悉Symfony框架之后,深刻感受到框架集成的ORM组件Doctrine2的强大之处,其中附带的数据迁移也十分方便.Doctrine2是使用Doctrine DBAL组件把代码里面的表结 ...
- 关于虚拟机linux网络的一个问题(基于cntos7)
刚刚开始学习搭建Linux集群,目前出现的比较麻烦的一个问题是Linux网络ip问题.其实网上好多出现类似问题的解答大部分说是因为克隆的问题,但实际情况先克隆产生的问题应该是很好排查的.所幸,有博主针 ...
- Cloudera Manager 安装集群遇到的坑
Cloudera Manager 安装集群遇到的坑 多次安装集群,但每次都不能顺利,都会遇到很多很多的坑,今天就过去踩过的坑简单的总结一下,希望已经踩了的和正在踩的童鞋能够借鉴一下,希望对你们能有所帮 ...
- [转] JetBrains Products License Server,适用RubyMine、Goland等
原文:http://jetbrains.license.laucyun.com/ Working Server http://jetbrains.license.laucyun.com (Lower ...
- git——本地项目上传到git
1.对于github相信大家写自动化代码的人都不陌生,而且这也可以说是你进军自动化的一项必须解锁的技能,今天抽空开始整理笔记,顺便整理下github的基本使用,从本地上传代码托管: 一.从无到有:先注 ...
- 用gogs搭建git服务器
Gogs 是一款极易搭建的自助 Git 服务. Gogs 的目标是打造一个最简单.最快速和最轻松的方式搭建自助 Git 服务.使用 Go 语言开发使得 Gogs 能够通过独立的二进制分发,并且支持 G ...