saber 酱的抱枕

Fly me to the moon

07/23
2020
学习

JavaScript 中 setTimeout 0 的使用

console.log(0)
setTimeout(() => {
  console.log(1)
}, 0);
console.log(2)

如上代码会输出 0,2,1。 setTimeout 里面的是最后执行的。这是因为 JavaScript 的任务队列分为同步队列和异步队列, 优先执行同步队列里的任务,同步队列里的任务执行完了才会执行异步队列里的任务。setTimeout 里的代码会被放到异步队列里,这样就改变了代码的执行顺序。指定时间 0 是让 JavaScript 执行异步队列时尽早执行这部分代码。

Read More →

JavaScript 中 setTimeout 0 的使用

05/23
2016
学习

JavaScript定时器里调用非全局函数的办法

对于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);
}()

直接写函数名就行了。困扰我多年的问题现在终于明白了。

JavaScript定时器里调用非全局函数的办法