Open sisterAn opened 4 years ago
function print(n){
setTimeout((() => {
console.log(n);
})(), Math.floor(Math.random() * 1000));
}
for(var i = 0; i < 100; i++){
print(i);
}
function print(n) { setTimeout( Promise.resolve(n).then((n) => { console.log(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() * 1000)); } for(var i = 0; i < 100; i++){ print(i); }
function print(n) { setTimeout(() => { console.log(n); }, 0, Math.floor(Math.random() * 1000)); } for (var i = 0; i < 100; i++) { print(i); }
// 取个巧 直接注释掉setTimeout,让他不再无序输出 。这里真正在执行print()时传进去的就是当前的i值
function print(n){
// setTimeout((() => {
console.log(n);
console.log(99-n)
//})(), Math.floor(Math.random() * 1000));
}
for(var i = 0; i < 100; i++){
print(i);
}
// 方法1, 利用setTimeout、setInterval的第三个参数,第三个以后的参数是作为第一个func()的参数传进去。
function print(n){
setTimeout(() => {
console.log(n);
}, 1, Math.floor(Math.random() * 1000));
}
for(var i = 0; i < 100; i++){
print(i);
}
// 方法2:修改settimout第一个函数参数
function print(n){
setTimeout((() => {
console.log(n);
return () => {}
}).call(n), Math.floor(Math.random() * 1000));
}
for(var i = 0; i < 100; i++){
print(i);
}
//async await
function print(n){
setTimeout(async () => {
await console.log(n);
}), Math.floor(Math.random() * 1000);
}
for(var i = 0; i < 100; i++){
print(i);
}
function print(n) {
setTimeout(() => {
setTimeout(() => {
console.log(n)
}, 1000 * n)
}, Math.floor(Math.random() * 1000))
}
for (var i = 0; i < 100; i++) {
print(i)
}
function print(n) {
setTimeout(() => {
console.log(n)
}, 0*Math.floor(Math.random() * 1000))
}
for (var i = 0; i < 100; i++) {
print(i)
}
function print (n) {
setTimeout(async () => {
await console.log(n)
}, (1)**Math.floor(Math.random() * 1000) * n);
}
for(var i = 0; i < 100; i++) {
print(i)
}
function print(n) {
setTimeout(
(() => {
console.log(n);
return function () {};
})(),
Math.floor(Math.random() * 1000)
);
}
for (var i = 0; i < 100; i++) {
print(i);
}
总结了一下,解法主要有三种:
利用 setTimeout
、 setInterval
的第三个参数,第三个以后的参数是作为第一个 func()
的参数传进去
function print(n){
setTimeout(() => {
console.log(n);
}, 1, Math.floor(Math.random() * 1000));
}
for(var i = 0; i < 100; i++){
print(i);
}
修改 setTimeout
第一个函数参数
function print(n){
setTimeout((() => {
console.log(n);
return () => {}
}).call(n), Math.floor(Math.random() * 1000));
}
for(var i = 0; i < 100; i++){
print(i);
}
利用异步函数
function print(n){
setTimeout(async () => {
await console.log(n);
}), Math.floor(Math.random() * 1000);
}
for(var i = 0; i < 100; i++){
print(i);
}
方法三错的,1000后面少了个括号
//async await function print(n){ setTimeout(async () => { await console.log(n); }), Math.floor(Math.random() * 1000); } for(var i = 0; i < 100; i++){ print(i); }
这。。写啥 async await哦。。
function print(n){
setTimeout(() => {
console.log(n);
}), Math.floor(Math.random() * 1000); // 这不是一样?实际是把 Math.floor(Math.random() * 1000); 用 ), 分离了
}
for(var i = 0; i < 100; i++){
print(i);
}
//多加一个参数不就可以了吗
function print(n){
setTimeout(() => {
console.log(n);
},1000, Math.floor(Math.random() * 1000));
}
for(var i = 0; i < 100; i++){
print(i);
} ```
方法一为什么多加一个参数就可以了
/**
* setTimeout传参数
*/
setTimeout((a,b,c)=>{
console.log(a,b,c)
},500,'My','name','is xll')
//解法一
function print1(n) {
setTimeout( () => {
console.log(n)
}, 1,Math.floor(Math.random() * 1000))
}
for (var i = 0; i < 100; i++) {
print1(i)
}
//解法二 异步函数
function print2(n) {
setTimeout(async ()=>{
await console.log(n)
}),Math.floor(Math.random()*1000)
}
for(var i=0;i<100;i++) {
print2(i);
}
异步函数 那个就是骗人, 不用 async 输出也是对的, 想到与 setTimeout(fn, 0), 宏任务也是按照顺序输出
其实方法就两种
function print(n){
setTimeout(() => {
console.log(n);
}), Math.floor(Math.random() * 1000);
}
// 方法1, 利用setTimeout、setInterval的第三个参数,第三个以后的参数是作为第一个func()的参数传进去。 function print(n){ setTimeout(() => { console.log(n); }, 1, Math.floor(Math.random() * 1000)); } for(var i = 0; i < 100; i++){ print(i); } // 方法2:修改settimout第一个函数参数 function print(n){ setTimeout((() => { console.log(n); return () => {} }).call(n), Math.floor(Math.random() * 1000)); } for(var i = 0; i < 100; i++){ print(i); }
借用以上代码
方法一 让执行的duration全都变成1, 与Math.floor(Math.random() * 1000)无关了 方法二 .call 立即执行函数直接把console.log执行了,与setTimeout无关了,可以通过在 return () => {} 加上console.log(n)验证
要求:
1、只能修改
setTimeout
到Math.floor(Math.random() * 1000
的代码2、不能修改
Math.floor(Math.random() * 1000
3、不能使用全局变量