【问题标题】:JavaScript setInterval callback before defining function? [duplicate]定义函数之前的JavaScript setInterval 回调? [复制]
【发布时间】:2017-06-21 07:54:10
【问题描述】:

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

令我惊讶的是,它运行良好。我一直在尝试对此进行研究,但结果一无所获:JavaScript 是否真的要等到第一次执行回调才能查看传递给它的函数名是否存在?这看起来很违反直觉,但我无法想象它会起作用的任何其他原因。在哪里可以找到有关此意外行为的更多信息?

【问题讨论】:

  • 函数定义被提升...

标签: javascript function settimeout setinterval


【解决方案1】:

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

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

如果它是一个函数声明

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-03
    • 1970-01-01
    • 1970-01-01
    • 2012-07-15
    • 1970-01-01
    相关资源
    最近更新 更多