You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
LazyMan("fangfang");// "Hi! This is fangfang!"//延迟任务LazyMan("fangfang").sleep(10).eat("dinner");/* Hi! This is fangfang! Wake up after 10s! Eat dinner~ *///链式调用LazyMan("fangfang").eat("dinner").eat("supper");/*Hi! This is fangfang!Eat dinner~Eat supper~*///更改任务顺序LazyMan("fangfang").sleepFirst(5).eat("supper");/*Wake up after 5s!Hi! This is fangfang!Eat supper~*/
function_LazyMan(name){this.tasks=[];//创建一个任务队列varself=this;varfn=(function(n){varname=n;returnfunction(){console.log("Hi! This is "+name+"!");self.next();}})(name);this.tasks.push(fn);//把第一个任务存放到任务队列setTimeout(function(){self.next();// 在下一个事件循环启动任务},0);}/* *事件调度函数 *///next() 控制任务执行顺序_LazyMan.prototype.next=function(){varfn=this.tasks.shift();//获取第一个任务,并从任务列表删除fn&&fn();}// eat sleep 把任务放到任务队列,返回this_LazyMan.prototype.eat=function(name){varself=this;varfn=(function(name){returnfunction(){console.log("Eat "+name+"~");self.next()}})(name);this.tasks.push(fn);returnthis;// 实现链式调用}_LazyMan.prototype.sleep=function(time){varself=this;varfn=(function(time){returnfunction(){setTimeout(function(){console.log("Wake up after "+time+"s!");self.next();},time*1000);}})(time);this.tasks.push(fn);//把任务函数存放到任务队列returnthis;}_LazyMan.prototype.sleepFirst=function(time){varself=this;varfn=(function(time){returnfunction(){setTimeout(function(){console.log("Wake up after "+time+"s!");self.next();},time*1000);}})(time);this.tasks.unshift(fn);//添加到任务列表开头returnthis;}/* 封装 */functionLazyMan(name){returnnew_LazyMan(name);}
题解: The arguments object is an Array-like object corresponding to the arguments passed to a function.
arguments是一个 object, z 就是 arguments[2], 所以对于 z的修改就是对 arguments[2] 的修改.
1.实现一个Lazyman
要求:
这是典型的JavaScript流程控制,问题的关键是如何实现任务的顺序执行。在Express有一个类似的东西叫中间件,每一个中间件执行完成后会调用next()函数,这个函数用来调用下一个中间件。
知识点
题解:
不清楚的debug看一下顺序,就能理解。
2. 改变this指向
要求:
题解:
3.获取 url 中的参数
要求:
题解:
4.查找共同父节点
要求:
查找两个节点的最近的一个共同父节点,可以包括节点自身
题解:
5.为 Array 对象添加一个去除重复项的方法
要求:
题解:
6.斐波那契数列
要求:
用 JavaScript 实现斐波那契数列函数,返回第n个斐波那契数。 f(1) = 1, f(2) = 1 等
斐波那契数列:1、1、2、3、5、8…… (后一位是前两位之和)
题解:
7.统计字符串中每个字符的出现频率
要求:
统计字符串中每个字符的出现频率,返回一个 Object,key 为统计字符,value 为出现频率
题解:
8.转换为驼峰格式
要求:
css 中经常有类似 background-image 这种通过 - 连接的字符,通过 javascript 设置样式的时候需要将这种样式转换成 backgroundImage 驼峰格式,请完成此转换功能
知识点:
题解:
9.优雅的方式求出数组的前10个元素之和
要求:
有一个长度为100的数组,请以优雅的方式求出该数组的前10个元素之和
知识点:
题解:
10.创建数组
easy
要求:
创建一个1-100的数组,按顺序递增
题解:
11.输出数字之和
要求:
字符串(包含中文、数字)要求:写一个函数,把这些数字加起来,输出这些数字的和。
E.g “我30你40他50” →120
题解:
12.不使用中间变量交换两个数的值
要求:
不使用中间变量交换两个数的值
题解:
第一种:加减法
该方法可以交换整型和浮点型数值的变量,但在处理浮点型的时候有可能出现精度的损失,
例如对数据:
a = 3.123456
b = 1234567.000000
交换后各变量值变为:
a = 1234567.000000
b = 3.125000
很明显,原来a的值在交换给b的过程中发生了精度损失。
第二种:乘除法
乘除法更像是加减法向乘除运算的映射,它与加减法类似:可以处理整型和浮点型变量,但在处理浮点型变量时也存在精度损失问题。而且乘除法比加减法要多一条约束:b必不为0。
可能经验上的某种直觉告诉我们:加减法和乘除法可能会溢出,而且乘除的溢出会特别严重。其实不然,采用这两种方法都不会溢出。以加减法为例,第一步的加运算可能会造成溢出,但它所造成的溢出会在后边的减运算中被溢出回来。
第三种:异或法
异或法可以完成对整型变量的交换,对于浮点型变量它无法完成交换。
13.输出什么
要求:
题解:
The arguments object is an Array-like object corresponding to the arguments passed to a function.
arguments是一个 object, z 就是 arguments[2], 所以对于 z的修改就是对 arguments[2] 的修改.
14.判断一个字符串中出现次数最多的字符,统计这个次数
The text was updated successfully, but these errors were encountered: