第 101 题:修改以下 print 函数,使之输出 0 到 99,或者 99 到 0
要求:
1、只能修改 setTimeout
到 Math.floor(Math.random() * 1000
的代码
2、不能修改 Math.floor(Math.random() * 1000
3、不能使用全局变量
function print(n){ setTimeout(() => { console.log(n); }, Math.floor(Math.random() * 1000)); } for(var i = 0; i < 100; i++){ print(i); }
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(28)
利用异步函数也可以,这个简单直接
请问第二个方法不是异步的吗,最后为什么不是都打印99呢?
function print(n) {
setTimeout(() => {
console.log(n);
}, n * 1001 + Math.floor(Math.random() * 1000));
}
for (var i = 0; i < 100; i++) {
print(i);
}
不知道这样违规没有
忽略Math.floor(Math.random() * 1000) 影响(不过打印的太慢了吧(#`O′))
function print(n){
setTimeout(() => {
setTimeout(()=>{
console.log(n);
},(n+1)*1000);
}, Math.floor(Math.random() * 1000));
}
for(var i = 0; i < 100; i++){
print(i);
}
只是判断是不是function类型
function print(n){
setTimeout( (() => {
console.log(n);
return ()=>{};
})(), Math.floor(Math.random() * 1000));
}
for(var i=0;i<100;i++){
print(i)
}
function print(n){
setTimeout(() => {
console.log((i++)-100);
}, Math.floor(Math.random() * 1000));
}
for(var i = 0; i < 100; i++){
print(i);
}
把Math.random挤掉就好了。
emm,楼主不给答案讲解得嘛
我理解的讲一下,2种方法
1.立即执行函数
2.定时器第二位重新赋固定的值
function print(n) {
setTimeout(async ()=>{
await new Promise((resolve, reject)=>{
setTimeout(()=>{
resolve(n)
},n*1000)
});
console.log(n)
},Math.floor(Math.random()*100))
}
for(var i=0;i<100;i++){
print(i)
}
1、闭包,匿名函数自执行 ,即使创建它的上下文已经销毁,变量仍然存在,
2、是随机输出 0 到 99,或者 99 到 0?
两种解法:
function print(n){
setTimeout(() => {
console.log(n);
}, 1, Math.floor(Math.random() * 1000));
}
for(var i = 0; i < 100; i++){
print(i);
}
2.可以利用settimeout 第一个参数可以是function是立即执行或者一个执行函数。
没有报错啊
综合上面大佬给出的答案,感觉这题就是打乱了输出顺序,根本解决办法无外乎就是让定时器里的函数在同一任务队列里去执行,立即执行函数可以实现,或者给任意只要相同的时间间隔也可以实现。
综合上面各位大佬的答案,使用立即执行函数如果没有return值的话相当于
浏览器会报错,所以还是需要加入返回值的
楼上匿名函数自执行是一种解法,直接利用表达式也是一种解法!
99到0,就是 99 - n
第一种解法:
另一种解法则是根据setTimeout的时间戳,只要让它按照时间戳顺序打印即可。但这样的时间耗时相当长。
function print(n){
setTimeout((() => {
console.log(n);
}).apply(n), Math.floor(Math.random() * 1000));
}
for(var i = 0; i < 100; i++){
print(i);
}
function print(n){ setTimeout(() => { console.log(n); }, Math.floor(Math.random()+1) * 1000); } for(var i = 0; i < 100; i++){ print(i); }