解Tom大叔出的Javascript题目
原文参考,http://www.cnblogs.com/TomXu/archive/2012/02/10/2342098.html
Tom大叔的博客深入理解Javascript系列真是我们学习Javascript的领航明灯, http://www.cnblogs.com/TomXu/archive/2011/12/15/2288411.html
有兴趣的朋友自己去学习下吧. 一下是对他出的6到题的解答.
第一题:找出数字数组中最大的元素(使用Match.max函数)
原本的我答案是这样
function getMax(array) {
var max= array[0];
array.forEach(function(element){
max<element?max=element:max;
});
return max;
}
var arr = [12, 5, 8, 130, 44,99,888];
console.log(getMax(arr)); //888
看到提示,查了Match.max文档 https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Math/max
发现其实只要这样就可以了.
var arr = [12, 5, 8, 130, 44,99,888];
console.log(Math.max.apply(null, arr));
其实这题是考的apply的用法和平时多api文档是否熟悉.要熟悉应该是非常简单旳.
第二题:转化一个数字数组为function数组(每个function都弹出相应的数字)
function NumberToFunction(arr){
var funarr = [];
arr.forEach(convert);
function convert(element,index,array){
function log(element){
return function(){console.log(element);};
}
funarr.push(log(element));
}
return funarr;
} var arr = [12, 5, 8, 130, 44,99,888];
var funa = NumberToFunction(arr);
//验证结果
funa.forEach(function(elment){
elment.call();
});
这道题我理解是考closures的概念,就是闭包. 有两点要注意
1. 循环中不能使用闭包 所以创建了function convert.
2. push里如果要接受convert的参数element不能使用闭包. 所有又添加了function log. 否则虽然可以创建function数组,但是数组里打印不出结果.
第三题: 给object数组进行排序(排序条件是每个元素对象的属性个数)
var persons = [
{
name: 'Jason',
age: 20,
gender:'male'
}, {
name: 'Tom',
age: 18
}, {
name: 'May',
age: 18,
gender: 'female',
high: '165cm'
}
]; persons.sort(function(a,b){
if(Object.getOwnPropertyNames(a).length >Object.getOwnPropertyNames(b).length){
return 1;
}
if(Object.getOwnPropertyNames(a).length<Object.getOwnPropertyNames(b).length){
return -1;
}
return 0;
}); console.log(persons);
Object.keys().length也可以.考api常识 Array.sort,Object.getOwnPropertyNames()或Object.keys()
第四题: 利用JavaScript打印出Fibonacci数(不使用全局变量)
function PFibonacci(){
var arrFib = [0,1];
var count = arguments[0]?arguments[0]:10;
return {
print:function(){
console.log(arrFib[0]);
console.log(arrFib[1]);
for(var i = 2; i< count;i++){
arrFib[i] = arrFib[i-1] + arrFib[i-2];
console.log(arrFib[i] );
}
}
}
} PFibonacci(20).print();
第五题:实现如下语法的功能:var a = (5).plus(3).minus(6);
Number.prototype.plus= function(x){
return this + x;
}; Number.prototype.minus = function(x){
console.log(this);
return this - x;
};
console.log((5).plus(3).minus(6)); //2
考prototype的用法.
第六题:实现如下语法的功能:var a = add(2)(3)(4); //9
var add = function (){
var x = arguments[0];
return function(){
x += arguments[0];
return function(){
return x += arguments[0];
}
};
};
console.log(add(2)(3)(4));//9
这题很纠结,想写出一个add()()()(...),无限下去的方法失败. 只能固定3重连加了.
解Tom大叔出的Javascript题目的更多相关文章
- TOM大叔的几道Javascript题目与解答
几道JS题目 之前没有深入研究js语言,最近几年前端越来越工程化,需要扎实的js基础,看到博客园上有很多大牛分享JS学习文章,幸运看到tom大叔的blog,抽时间潜心学习了其文章,遇到到其出的几道题目 ...
- 汤姆大叔 javascript 系列 第20课 最后的5到javascript题目
博客链接:http://www.cnblogs.com/TomXu/archive/2012/02/10/2342098.html 原题: 大叔注:这些题目也是来自出这5个题目的人,当然如果你能答对4 ...
- javascript - 浏览TOM大叔博客的学习笔记
part1 ---------------------------------------------------------------------------------------------- ...
- 看看国外的javascript题目,你能全部做对吗?(分享)
本文转自@Aaron的博客,拿过来分享一下.原文:看看国外的javascript题目,你能全部做对吗? 题目一: (function(){ return typeof arguments; })(); ...
- js便签笔记(11)——浏览TOM大叔博客的学习笔记 part1
1. 前言 这两天看了一下TOM大叔的<深入理解js系列>中的基础部分,根据自己的实际情况,做了读书笔记,记录了部分容易绊脚的问题.写篇文章,供大家分享. 2. 关于HTMLCollect ...
- 容易出错的JavaScript题目集锦
容易出错的JavaScript题目集锦 1.typeof(null) 会得到什么?object,在JavaScript中null被认为是一个对象. 2.下列代码将输出控制台的是什么?为什么? 1234 ...
- 试试看 ? 离奇古怪的javascript题目
来源地址: http://dmitrysoshnikov.com/ecmascript/the-quiz/#q1 另一篇帖子 看看国外的javascript题目,你能全部做对吗? http://www ...
- c语言贪吃蛇详解-2.画出蛇
c语言贪吃蛇详解-2.画出蛇 前几天的实验室培训课后作业我布置了贪吃蛇,今天有时间就来写一下题解.我将分几步来教大家写一个贪吃蛇小游戏.由于大家c语言未学完,这个教程只涉及数组和函数等知识点. 蛇的身 ...
- c语言贪吃蛇详解1.画出地图
c语言贪吃蛇详解-1.画出地图 前几天的实验室培训课后作业我布置了贪吃蛇,今天有时间就来写一下题解.我将分几步来教大家写一个贪吃蛇小游戏.由于大家c语言未学完,这个教程只涉及数组和函数等知识点. 首先 ...
随机推荐
- CSS3图片缩放
鼠标指上去,图片放大,鼠标离开图片恢复原样,并且有放大.缩小效果 Css代码实现:
- MYSQL C API : struct MYSQL_STMT 结构的组合使用
#include <iostream> #include <string> #include <string.h> #include <assert.h> ...
- Python第十二章正则表达式(2)
1.前提是引入import re 匹配邮箱后缀需要写入r=r'\.com\.cn|\.com|\.cn' r=r'(\w+@\w+(\.com\.con|\.com|\.cn))'ll=re.find ...
- MFC webbrowser读取文档的meta分析
IDispatch* pDisp = NULL; IDispatch* pDisp2 = NULL; IHTMLDocument2 *pHtmlDoc2 = NULL; IHTMLElementCol ...
- 【练习】数据移动---parfile导出表中指定行:
要求: ①创建存放数据的文件: ②使用默认的bad文件生成方式: ③使用truncate选项方式. 1.准备条件: [oracle@host03 ~]$ mkdir datadump [oracle@ ...
- iOS软件开发架构理解
这个东西是硬伤,框架?自带的mvc? 自带的UIViewController UIView UINavigationController 这些算不算?当然算的,cocoa框架嘛,大家都知道. 其实,我 ...
- OAuth2集成
目前很多开放平台如新浪微博开放平台都在使用提供开放API接口供开发者使用,随之带来了第三方应用要到开放平台进行授权的问题,OAuth就是干这个的,OAuth2是OAuth协议的下一个版本,相比OAut ...
- delegate事件绑定
为了代码的健壮性,绑定事件之前先解绑再进行绑定. var _$div = $("#id");_$div.undelegate("click mouseover mouse ...
- UVa 10055 - Hashmat the Brave Warrior
https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=94&page=s ...
- 搭建java,oracle,plsql开发环境
一:安装jdk和jre; (1)有两种方法:1,从官网网址上安装:2,安装绿色版 (2)配置环境变量 在"系统变量"下进行如下配置: (1)新建->变量名:JAVA_HOME ...