这个函数调用有什么不同之处?

3
setInterval("RunSlide()", 5000);

首先,使用括号和引号调用一个函数。

setInterval("RunSlide", 5000);

第二步,使用引号调用一个无需括号的函数。
setInterval(Runslide, 5000);

第三步,调用一个没有括号和引号的函数。
RunSlide();

第四步,使用括号调用一个函数。
RunSlide;

第五,调用函数时不需要括号。

8
不加括号提到函数名并不会调用函数,它只是对函数对象的引用。 - Pointy
“函数对象的引用”是什么意思?我还不理解“函数对象”。 - Ega Rana
你的第五个选项“不使用括号调用函数”是一个变量名,因为JavaScript无法知道你的意思是调用一个函数。 - j08691
1
在JavaScript中,函数是对象。函数的名称就像变量名一样,指向函数对象。当其后跟( )运算符时,就会进行函数调用。如果没有跟随( )运算符,它就只是对该对象的引用,就像对任何其他对象的引用一样。 - Pointy
顺便提一下,因为这个问题,我发现了 Firefox 13 的 Web 控制台中的一个 bug:https://bugzilla.mozilla.org/show_bug.cgi?id=774365 - kojiro
1个回答

2
即使结果可能相同,但使用不同的参数类型会有所不同。
  • setInterval("作为字符串的参数", delay)

    这将导致与将字符串传递给eval相同的行为,因此不建议使用(出于同样的原因,有关此主题的更多信息可以在网上找到)。

示例片段:

 setInterval ("console.log ('hello world');", 100);

  • setInterval (func_reference, delay, param1, param2, ...)

    这将导致指向 func 的函数被调用,这是推荐的选项。如果您以这种方式调用函数,还可以传递参数给要执行的函数。

示例代码片段:

function say_it (word1, word2) {
  console.log (word1 + " " + word2);
}

setInterval (say_it, 100, "hello", "world");

setInterval (function (word1, word2) {
   console.log (word1 + " " + word2);
}, 100, "hello", "world);

注意事项

使用只包含函数名称的字符串作为 setInterval 的第一个参数是毫无意义的,该函数不会被执行。这与在代码中编写以下内容相同。

alert;

在上面的例子之后,RunSlide();RunSlide;之间的区别应该很明显了。前者将调用名为RunSlide的函数,而后者则不会(根本不执行任何操作)。

感谢您的回答@refp,我非常感激。 - Ega Rana
@EgaRana 别忘了接受答案来标记问题已解决,点击此链接阅读更多信息:接受答案:如何操作? - Filip Roséen - refp

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接