在使用一些JavaScript时,我遇到了令人困惑的行为,我正在寻找一些解释发生了什么的文档。传递javascript函数作为参数
问题似乎是,根据函数的传递方式,当我认为它们只是参数时,它们可能会被执行。
下面是一个简单的例子:
function f1()
{
alert('f1');
}
function f2()
{
alert('f2');
}
function f3(a, b)
{
alert('f3');
}
两个调用以上的版本:
f3(f1, f2); // shows 1 alert
f3(f1(), f2()); // shows 3 alerts
F3的在上面的的F1和F2功能结果第一次调用不会被调用,你得到一个“f3”的警报。 f3函数的第二次调用被调用,所以你会得到三个“f1”,“f2”和“f3”警报。
在实际的代码中,我将使用第一个版本,以便f3可以决定是否要调用f1和f2。我花了一些时间来纠正错误。
我没有想到这种行为,并认为无论是否带圆括号的f1和f2都不会仅仅通过让它们成为参数而被调用。
再次,我正在寻找一些解释如何工作的文档。
你需要知道的文档是'()'调用一个函数,否则你只是引用一个函数。你的第一行将'f1'和'f2'函数的引用传递给'f3'。你的第二行立即调用'f1'和'f2',并将它们的返回值(“undefined”,因为它们不返回任何东西)传递给'f3'。由于'f3'对'a'和'b'没有任何作用,所以如果你调用它们,通过 – Ian
并不重要,你将函数的返回值作为参数传递,而不是函数本身。由于参数在传递之前已经被解决,所以js不知道在调用中实际发生了什么。在你的情况下,所有的函数都返回undefined,但是因为你从不使用参数,所有这些都没有关系。 – dandavis
有些语言可以延迟函数调用。 JavaScript没有这种能力。当你打电话时,立即打电话给他。 –