07/23
2020
console.log(0)
setTimeout(() => {
console.log(1)
}, 0);
console.log(2)
如上代码会输出 0,2,1。 setTimeout 里面的是最后执行的。这是因为 JavaScript 的任务队列分为同步队列和异步队列, 优先执行同步队列里的任务,同步队列里的任务执行完了才会执行异步队列里的任务。setTimeout 里的代码会被放到异步队列里,这样就改变了代码的执行顺序。指定时间 0 是让 JavaScript 执行异步队列时尽早执行这部分代码。
JavaScript 中 setTimeout 0 的使用
05/23
2016
对于JavaScript的定时器(setInterval、setTimeout)来说,使用它们来调用其他函数时,两种调用方法是有区别的。
第一种方法如下,以字符串形式调用函数。
!function () { function f() { console.log("saber"); } setTimeout("f()",1); }()
使用这种方式要注意一点,它不能调用局部函数,只能调用全局函数。如函数f是个局部函数,用这种方式调用会报错:
Uncaught ReferenceError: f is not defined
碰到需要调用的函数是局部函数的话,则可以使用第二种调用方式:
!function () { function f() { console.log("saber"); } setTimeout(f,1); }()
直接写函数名就行了。困扰我多年的问题现在终于明白了。