flowers
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