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 ...
随机推荐
- [iOS]UIDynamicAnimator动画
创建动画 UIDynamicAnimator *animator = [[UIDynamicAnimator alloc] initWithReferenceView:self.view]; 协议代理 ...
- elementUi + express 上传图片
// 前端代码 <el-upload drag action="http://localhost:4001/article/uploadCoverImage" multipl ...
- Vue中使用webpack别名的方法
在工作中,我们经常会写出这种代码: import MHeader from '../../components/m-header/m-header' @import "../../commo ...
- BZOJ1969: [Ahoi2005]LANE 航线规划(LCT)
Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 587 Solved: 259[Submit][Status][Discuss] Description ...
- vux使用过程中遇到的问题
1.使用confirm.prompt组件时,ios下点击输入框很难获得焦点 解决思路:使用confirm.show方法,自定义content内容,show方法里面设置input的focus方法 let ...
- JQuery模拟网页中自定义鼠标右键菜单
题外话.......最近在开发一个网站项目的时候,需要用到网页自定义右键菜单,在网上看了各路前辈大神的操作,头晕目眩,为了达到目的,突然灵机一动,于是便有了这篇文章. 先放个效果图(沾沾自喜,大神勿喷 ...
- js时间与毫秒互相转换
1)日期转换为毫秒 如果格式是:yyyy/mm/dd hh:mm:ss可以直接转换.var oldTime = (new Date("2018/07/09 14:13:11")). ...
- JavaScript入门学习(0)相关 软件工具
JavaScript本地脚本编辑工具(1st JavaScript Editor Pro ) 必要设置 https://pan.baidu.com/s/1XoaNA9o0qt2eJfLgoZ5 ...
- centos7 关闭防火墙
centos7 关闭防火墙 1.firewall相关的操作 查看防火墙状态 firewall-cmd --state 关闭防火墙 systemctl stop firewalld.s ...
- 调试日志——基于stm32的智能声光报警器(三)
智能声光报警器基本功能调试完成. 1.通过拨码开关来设置LED闪烁的频率. 2.关门时喇叭不想,灯熄灭. 3.旁路模式时,灯处于闪烁状态,此时关门灯扔闪烁. 关于此次代码我觉得还是有可以优化的地方,电 ...