Javascript quiz
作为一个勤劳的corder,在大年三十的前一天还留守在公司的最前线。百无聊赖中看到一套关于js的测试题,测试过后发现有些题还是有很大的意义,至少能够让我门对js基础有所重视。本人将每道题的考察点总结了一下,希望能够帮助还游荡在js门外的同学们,由于本人也是js新手,文中如有不妥望大神们指出,共同进步。
话不多说,直接上题:
1. 下面函数的返回值是?
(function(){
return typeof arguments;
})();
A. "object" B. "array" C. "arguments" D. "undefined"
分析:我们知道在函数体内,标识符是arguments是指向实参对象的引用。arguments并不是真正的数组,它是一个实参对象。每个实参对象都包含以数字为索引的一组元素以及length属性,可以理解它是对象,只是碰巧具有以数字为索引的属性。既然是对象,typeof arguments返回的是必然是object。
2. 下面函数的结果是?
var f = function g(){ return 23; };
typeof g();
A. "number" B. "undefined" C. "function" D. "Error"
分析:定义一个函数可以是:
1.函数声明 function 函数名称 (参数:可选){ 函数体}
2. 函数表达式 function 函数名称(可选)(参数:可选){ 函数体 }
题目中的定义方式为命名函数表达式,函数名g只能在函数体内部访问,因此在函数外部执行g()会报错,结果是D。
如果想进一步了解关于函数命名表达式可以参考本站中汤姆大叔的JavaScript连载系列深入理解JavaScript系列(2):揭秘命名函数表达式。
3. 下面函数的返回值是?
(function(x){
delete x;
return x;
})(1);
A. 1 B. null C. undefined D. Error
分析:delete可以删除对象的某些属性,但是不能删除arguments对象。因此最终结果仍是1。
4. 下面函数的结果是?
var y = 1, x = y = typeof x;
x;
A. 1 B. "number" C. undefined D. "undefined"
分析:该题我们只需要知道 x = y = typeof x的执行顺序即可。将上述表达式拆分为两步:
1. y = typeof x; 2. x = y。
执行 y = typeof x 的时候x还没有定义,只有typeof一个未定义的变量时会返回"undefined",其他情况均会报错。所以y = "undefined", x = y = "undefined"。
5. 下面函数的返回值是?
(function f(f){
return typeof f();
})(function(){ return 1; });
A. "function" B. "number" C. Error D. "undefined"
分析:将一个函数作为一个函数的参数,f()返回1,typeof f()必然返回"number"。
6. 下面函数的返回值是?
var foo = {
bar: function() { return this.baz; },
baz: 1
};
(function(){
return typeof arguments[0]();
})(foo.bar);
A. "object" B. "number" C. "function" D. "undefined"
分析:将foo.bar作为一个函数的参数。一定要看清最后返回的不是arguments[0],而是arguments[0]()。而执行foo.bar( 等同于arguments[0]() )返回的是this.baz,在这里this指向的是arguments对象。arguments对象没有baz属性,因此返回undefined。
7. 下面函数的结果是?
var foo = {
bar: function(){ return this.baz; },
baz: 1
}
typeof (f = foo.bar)();
A. "object" B. "number" C. "function" D. "undefined"
分析:foo.bar 为 function(){ return this.baz },将 foo.bar 赋给变量 f 并执行返回this.baz,此时this指向window,window并没有一个baz属性,所以最终返回"undefined"。我们可以做个实验,如果在定义对象foo之前加入一句window.baz = 100; 最后返回的值就是"number"。说明this当时指向的是window。
8. 下面函数的结果是?
var f = (function f(){ return "1"; }, function g(){ return 2; })();
typeof f;
A. "string" B. "number" C. "function" D. "undefined"
分析:我们先来看一个表达式 f = (1,2); f的值最终是2。然后再看这个题目就比较简单了,f 最终执行的是括号里的第二个函数,返回的是"number"。
9. 下面函数的结果是?
var x = 1;
if (function f(){}) {
x += typeof f;
}
x;
A. 1 B. "1function" C. NaN D. "1undefined"
分析:将一个函数作为 if 判断条件,返回的是true。typeof f的值是"function",1 + "function" = "1function"。
10. 下面函数的结果是?
var x = [typeof x, typeof y][1];
typeof typeof x;
A. "number" B. "string" C. "object" D. "undefined"
分析:x = typeof y。由于y未定义,所以返回的是"undefined"。而typeof ("undefined")返回的是string。
11. 下面函数的结果是?
(function(foo){
return typeof foo.bar;
})({ foo: { bar: 1 } });
A. "number" B. Error C. "object" D. "undefined"
分析:将{ foo: { bar : 1 } }作为参数传入函数中,传入的参数只是一个对象,并没有将该对象赋给任何一个变量,因此typeof foo.bar返回的是"undefined"。
如果定义var x = { foo: { bar : 1 } },则 x.foo.bar == 1。
12. 下面函数的返回值是?
(function f(){
function f(){ return 1; }
return f();
function f(){ return 2; }
})();
A. 1 B. Error(e.g. "Too much recursion") C. 2 D. undefined
分析:这个题目涉及到了JS的预解析概念。首先看一下函数的预解析机制:
1、javascript在执行前会进行类似"预解析"的操作:首先会创建一个在当前执行环境下的活动对象,并将那些用var 声明的变量、定义的函数设置为活动对象的属性,但是此时这些变量的赋值都是undefined。
2、在javascript解释执行阶段,遇到变量需要解析时,会首先从当前执行环境的活动对象中查找,如果没有找到而且该执行环境的拥有者有prototype属性时则会从prototype链中查找,否则将会按照作用域链查找。遇到var a = …这样的语句时会给相应的变量进行赋值(注意:变量的赋值是在解释执行阶段完成的,如果在这之前使用变量,它的值会是undefined)。
也就是说虽然function f(){return 2;}放在了return的后边,但是它在预解析的阶段就已经定义好了,最终函数f返回的应该是2。更详细的关于函数预解析和作用域链的知识同样可以参考山姆大叔的JavaScript连载系列深入理解JavaScript系列(14):作用域链(Scope Chain)。
13. 下面代码的结果是?
function f(){ return f; }
new f() instanceof f;
A. true B. false
分析:代码的第二行是通过new来创建的f的实例,所以可以把f看为一个构造函数,而构造函数中如果有return,则返回的是return的内容。也就是f本身,因此f instanceof f返回的是false,而f instanceof Function返回的是true。
14. 下面代码的结果是?
with (function(x, undefined){}) length;
A. 1 B. Error C. 2 D. undefined
分析:本人平时很少使用with语句,网上搜了一下关于with的资料。具体解释如下:
with 语句可以方便地用来引用某个特定对象中已有的属性,但是不能用来给对象添加属性。要给对象创建新的属性,必须明确地引用该对象。
而with(function(x, undefined){}) length; 等同于 function fn(x, undefined){} fn.length。通过测试发现length属性返回的是函数参数的个数,本例中即为2。
结语:
相信看完本篇文章的同学也发现了js基础知识的重要性,本站中山姆大叔的JS连载系列个人感觉质量比较高,如果能够仔细的研读一遍对个人的JS水平会有不小的提高。最后在新春来临之际预祝所有的前端同学马上有Money,成为前端大牛。附上原文地址:http://perfectionkills.com/javascript-quiz/。
Javascript quiz的更多相关文章
- 一些牛逼哄哄的javascript面试题
今天我们来对这5个题目详细分析一下,希望对大家有所帮助. 注: 问题来自大名鼎鼎的前端架构师Baranovskiy的帖子<So, you think you know JavaScript?&g ...
- JavaScript面试时候的坑洼沟洄——逗号、冒号与括号
看完了javaScript数据类型和表达式与运算符相关知识后以为可以对JavaScript笔试题牛刀小试一把了,没想到有一次次的死在逗号,冒号和括号上,不得已再看看这几个符号吧. 逗号 逗号我们常见的 ...
- JavaScript面试时候的坑洼沟洄——数据类型
前些日子写了篇关于最近找工作的一些感受的博客 找工作的一些感悟--前端小菜的成长,没想到得到了很多园友的共鸣,得到了很多鼓励,也有园友希望我分享一些笔试.面试的经验.我觉得分享一些笔试题没太多价值,对 ...
- 14 个折磨人的 JavaScript 面试题
前端工程师有时候面试时会遇到一类面试官,他们问的问题对于语言本身非常较真儿,往往不是候选人可能期待的面向实际的问题(有些候选人强调能干活就行,至于知不知道其中缘由是无关痛痒的).这类题目,虽然没有逻辑 ...
- 深入理解JavaScript系列(20):《你真懂JavaScript吗?》答案详解
介绍 昨天发的<大叔手记(19):你真懂JavaScript吗?>里面的5个题目,有很多回答,发现强人还是很多的,很多人都全部答对了. 今天我们来对这5个题目详细分析一下,希望对大家有所帮 ...
- JS逗号、冒号与括号
JavaScript面试时候的坑洼沟洄——逗号.冒号与括号 看完了javaScript数据类型和表达式与运算符相关知识后以为可以对JavaScript笔试题牛刀小试一把了,没想到有一次次的死在逗号 ...
- W3Schools Quizzes
W3Schools Quizzes Test your skills https://www.w3schools.com/quiztest/default.asp Quiz HOME Quiz HTM ...
- codecademy quiz——JavaScript Promise
Evernote Export What is the fulfilled value of Promise.all()? A Promise An object An array ...
- [js测试]JavaScript Web Quiz By davidshariff
Question1 var foo = function foo() { console.log(foo === foo); }; foo(); 输出是"true",因为foo就指 ...
随机推荐
- fiddler Composer 构建请求
Fiddler的作者把HTTP Request发射器取名叫Composer(中文意思是:乐曲的创造者),以前叫做Request Builder Fiddler Composer的功能就是用来创建HTT ...
- rsyslog 日志服务器接收日志权限问题
rsyslog 权限: 默认 [root@dr-mysql01 zjzc_log]# ls -ltr zj-frontend0*-access*27 -rw------- 1 root root 32 ...
- sybase 备份和恢复
use master go dump transaction MBFEWKDB with no_log go dump transaction MBFEHISDB with no_log go use ...
- APP纯黑盒测试---某些可以试试的操作
一.多次快速点击一处功能入口: 该测试方法可以在某些应用中打开俩次目标界面,举一些具体一点的例子: 1.比如现在很多APP需要登陆,如果打开了俩次登录页面,就容易造成登录成功后应用跳转界面又是登录界面 ...
- cocoapods 的使用心得
一般我们下载的demo里边含有cocoapods 我们需要 在终端上输入命令,让他能够成功运行 步骤如下: 打开终端 cd 项目目录 直接拖动到终端里边就可以, 然后 pod install 如果 ...
- POJ 1637 混合图求欧拉回路 最大流实现
前面讲过了无向图,有向图求欧拉回路,欧拉通路的做法.可以直接根据度数来判断,当然前提是这是一个连通图. 这道题既有无向边,又有有向边,然后求欧拉回路. 采用的方法是最大流. 具体处理方法. 首先,我们 ...
- [React] React Router: Named Components
In this lesson we'll learn how to render multiple component children from a single route. Define a n ...
- 金典 SQL笔记(4)
由于在本地笔记上写的.CSDN markdown编辑器仅仅支持.md格式导入, 图片没办法直接导进去.写的多了懒的一张一张图片切图上传; 直接整个文章切成图片上传上去了. watermark/2/te ...
- vim的基本使用方法
头记:vim作为被大多数程序员所推崇的编辑器,是源于它的自由灵活以及令人舒服的输入模式,但对于新手来说无疑是个噩梦(需要记太多的命令), 而作为使用了vim有一段时间的我来说,总结下常用的命令,以备新 ...
- 前端 HTML基础
前端三大利器概述 学习前端,不得不学习前端中的三大利器:html + css + javascript.那么这三个组件分别起到什么作用呢?以人体为例,单单具有html属性的人,只是一个裸体的人偶(理解 ...