saber 酱的抱枕

Fly me to the moon

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定时器里调用非全局函数的办法