首页 文章

声明参数内的函数[1]

提问于
浏览
-2

这个问题在这里已有答案:

有人可以向我解释这些例子之间的区别吗?

目前这对我有用:

var timer1 = setInterval(function () {nextSlide(slideShow1)}, slideShow1Timer);

我想知道的是为什么我需要一个匿名函数,因为这不起作用:

var timer1 = setInterval(nextSlide(slideShow1), slideShow1Timer);

哪个对我不起作用。

然后我也尝试了这个:

var timer1 = function(){setInterval(function () {nextSlide(slideShow1)}, slideShow1Timer)};

还有这个:

var timer1 = function(){setInterval(nextSlide(slideShow1), slideShow1Timer)};

我发现最上面的一个有效,但我不明白每个例子中发生了什么。所以为了让我免于猜测,我希望能够理解为什么我这样编写代码。

谢谢。

编辑:这不是该问题的重复,因为我不是在询问 setInterval。我在询问格式。

addEventListener 也是如此。在这个例子中:

window.addEventListener("click", function(){alert("test")});

或者像这样:

window.addEventListener("click", alert("test")});

我想知道有什么区别。

2 回答

  • 1

    这是因为您需要对函数或匿名函数的引用,而不是函数调用。你也可以使用一个字符串:

    setInterval("aFunction()", 1000); //This would also work
    

    在两种情况下你真的只需要一个匿名函数 - 当函数有参数时,或者你一次执行多个函数时。在这些情况下,字符串不起作用,我们已经知道你不能只调用该函数。所以要运行这个功能:

    nextSlide(slideShow1);
    

    在超时时,您必须使用匿名函数:

    setTimeout(function() { nextSlide(slideShow1) }, 1000);
    

    希望这有帮助!

  • 1

    如果你使用function () {nextSlide(slideShow1)},这是一个函数定义,而当你传递nextSlide(slideShow1)时,你正在进行函数调用。您可以在此处阅读有关回调函数的更多信息:https://codeburst.io/javascript-what-the-heck-is-a-callback-aba4da2deced

相关问题