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

定义函数之前的JavaScript setInterval回调?,javascript,function,settimeout,setinterval,Javascript,Function,Settimeout,Setinterval,我目前是一名网络开发课程的助教。今天,一名学生在作业中请求帮助,他在作业中使用了setInterval,将一个函数作为第一个参数传递,直到几行代码之后他才定义该函数。我告诉他这行不通,因为当到达间隔设置代码时,函数将是未定义的 令我惊讶的是,它工作得非常好。我一直在尝试研究这个问题,但结果是一片空白:JavaScript是否真的会等到回调的第一次执行时才看到传递给它的函数名是否存在?这似乎是违反直觉的,但我无法想象它会起作用的任何其他原因。在哪里可以找到有关此意外行为的更多信息?这取决于: 如果

我目前是一名网络开发课程的助教。今天,一名学生在作业中请求帮助,他在作业中使用了setInterval,将一个函数作为第一个参数传递,直到几行代码之后他才定义该函数。我告诉他这行不通,因为当到达间隔设置代码时,函数将是未定义的

令我惊讶的是,它工作得非常好。我一直在尝试研究这个问题,但结果是一片空白:JavaScript是否真的会等到回调的第一次执行时才看到传递给它的函数名是否存在?这似乎是违反直觉的,但我无法想象它会起作用的任何其他原因。在哪里可以找到有关此意外行为的更多信息?

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

如果是函数声明:

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


它还取决于传递的函数:

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

函数定义被提升。。。
//callback is defined
function callback(){}
//callback is defined
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(){};