setTimeout() 的第三个参数
2021.08.285 min read
原创声明:未经允许,禁止转载
在阅读新版 《JavaScript高级程序设计》 chap11时第一次得知setTimeout()还有第三个参数
function double(value) {
setTimeout(() => setTimeout(console.log, 0, value * 2), 1000);
}
double(3); // 6 (printed after roughly 1000ms)
可以看到上面的一个常规setTimeout里面还有一个setTimeout, 而它被传入了三个参数, 第三个其实就是第一个参数(执行方法)的参数, 即是说这个setTimeout在一秒后被调用执行的是 console.log(6*2)
来看看setTimeout的一般语法:
let timerId = setTimeout(func|code, [delay], [arg1], [arg2], ...)
可见setTimeout不仅能传入第三个参数,还可以传入第四个甚至更多,并没有设限。
对比一下普通的日常setTimeout用法:
function greet(){
alert('Hello!')
}
setTimeout(greet,1000);
// 1s 后输出:Hello
另外传入两个普通参数:
function greet(arg1, arg2){
console.log(arg1,arg2)
}
setTimeout(greet,1000,"Hi", "Jack");
//输出: Hi Jack
当然,参数不仅仅可以是string,也可以是任何类型的集合引用类型:
p = ["Hellen", "Jack"];
setTimeout(console.log, 0, "Hello, ", p.join(" and "));
//输出: Hello, Hellen and Jack
function greet(person){
console.log("Hi "+person.name);
}
const person = {name:"abc", age: 21}
setTimeout(greeting,1000,person);
//output: Hi abc