我目前是网络开发课程的老师助手。今天,一名学生在他的家庭作业中寻求帮助,他在其中使用了setInterval,将第一个参数作为第一个参数传递给他,直到几行代码后才定义。我告诉他不会工作,因为到达间隔设置代码时函数将不确定。
令我惊讶的是,它完美无缺。我一直试图研究这个问题并且空白:JavaScript实际上是等到第一次执行回调,甚至看看传递给它的函数名是否存在?这似乎是违反直觉的,但我无法想象它会起作用的任何其他原因。我在哪里可以找到有关这种意外行为的更多信息?
答案 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(){};