定义函数之前的JavaScript setInterval回调?

时间:2017-06-21 07:54:10

标签: javascript function settimeout setinterval

我目前是网络开发课程的老师助手。今天,一名学生在他的家庭作业中寻求帮助,他在其中使用了setInterval,将第一个参数作为第一个参数传递给他,直到几行代码后才定义。我告诉他不会工作,因为到达间隔设置代码时函数将不确定。

令我惊讶的是,它完美无缺。我一直试图研究这个问题并且空白:JavaScript实际上是等到第一次执行回调,甚至看看传递给它的函数名是否存在?这似乎是违反直觉的,但我无法想象它会起作用的任何其他原因。我在哪里可以找到有关这种意外行为的更多信息?

1 个答案:

答案 0 :(得分:1)

取决于: 如果是函数表达式

//callback not defined ( exists but undefined)
var callback=function(){};
//callback defined

如果是函数声明

//callback is defined
function callback(){}
//callback is defined

这称为提升,因此vars和函数被移到顶部。

它也取决于传递的函数:

setInterval(callback,0);//doesnt work, callback is *undefined* in this moment

setInterval(function(){ callback();},100);//does work as callback is just called before being referenced.
var callback=function(){};