牛客网看到的一道腾讯实习笔试题
发布于 7 年前 作者 Littlesqx 6750 次预览 最后一次回复是 7 年前 来自 问答
实现 Hardman 函数
要求:
HardMan("jack")
// > I am jack
HardMan("jack").rest(10).learn("computer")
// > I am jack
// 等待10秒
// > Start learning after 10 seconds
// > Learning computer
HardMan("jack").restFirst(5).learn("chinese")
// 等待5秒
// > Start learning after 5 seconds
// > I am jack
// > Learning chinese
上文中 [ > … ] 表示打印内容。
挺有意思的,但是解不了,就来问问
13 回复
以上代码可以实现当前要求 推测考察的是对eventloop的理解吧 但是
rest和restFirst如果多次调用就不知道了 要求里没有体现刚写完,发现楼上已经发出答案了。比自己写的简单多了。就不贴代码了。向楼上学习。
@Zero2key 考什么我就不知道了,不过你的答案能实现要求就是了。我也贴一下找到的另一个答案,可以实现多次 rest
@hfuuss 也学习一下这个。
var HardMan = function (name) {
aop 切片 实现
@Littlesqx 这个思路是对的,正如六楼要的----最后还能restFirst,所以是用一个任务队列来存储这些调用。 首先构造函数把介绍自己的任务压入队列,然后在下一个事件循环开始时,取出并执行队列第一个任务。 每一个方法都会把”自己的功能+调用队列下一个任务“包装成任务,压入队列中。有点像restify中间件的调用。 值得说的是restfirst方法需要把任务弄到队列头部。
贴出我自己写的有注释版本:
看来只有我想复杂了。。。用的promise来实现,原来一个队列就可以解决的事
一个简洁的实现,支持随意重复调用rest/restFirst/learn(把restart也放进去只是为了让后面少一行代码)
景安拼团活动,云服务器96元/年。原价960 活动链接:http://server.zzidc.com/pintuan.html