在参数内部声明函数

时间:2018-12-12 09:04:26

标签: javascript

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

目前正在为我工​​作:

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 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

这是因为您需要引用函数或匿名函数,而不是函数调用。您还可以使用字符串:

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

在两种情况下,您实际上只需要一个匿名函数-当函数具有参数时,或一次执行多个函数时。在这些情况下,字符串将不起作用,并且我们已经知道您不能只调用该函数。因此,要运行此功能:

nextSlide(slideShow1);

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

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

希望这会有所帮助!