在JavaScript中的if语句中使用不带括号的函数名称会做什么?

时间:2018-12-08 18:44:55

标签: javascript if-statement function-call

例如:

function foo (parameter1, parameter2) {
    // does something
}

if (foo) {
    foo(parameter1, parameter2);
}

在另一个问题(In JavaScript, does it make a difference if I call a function with parentheses?)中讨论了调用不带括号的函数,但是我仍然不明白上面的代码是做什么的。

我之所以问是因为我试图了解if (drag) {..}在此代码中的作用:https://andreasrohner.at/posts/Web%20Development/JavaScript/Simple-orbital-camera-controls-for-THREE-js/

3 个答案:

答案 0 :(得分:1)

您的代码定义了带有两个参数的全局函数foo。

在那之后有一个if语句来检查foo是否为真(foo是您的函数,因此为真)。因此它调用函数foo。 但是要小心,如果未定义foo,您的代码将抛出ReferenceError

检查功能是否存在的更好方法是:

while update.lower() not in ["tests", "lessons", "adjust"]:
     update = input("Do you want to update content from 'lessons' or 'tests'. Or do you want to 'adjust' what you aren't confident with. respond with 'adjust' 'lesson' or 'tests'").lower()

     if update.lower() in ["tests", "lessons", "adjust"]:
         options()

答案 1 :(得分:0)

这段代码只是检查~~函数~~是否存在名为foo的东西~~,因此可以安全调用~~。

另一方面,如果执行(foo()),则if块中的代码仅在foo()返回等于true的条件下才会执行。

答案 2 :(得分:0)

就其本身而言,尚不清楚该代码应如何提供帮助。也许有了更多的背景就可以了。

考虑以下选项:

1。从未定义函数foo

如果未声明foo,则:

if(foo) {} 

是参考错误。它崩溃了。

2。 Foo已定义,但不是功能

foo可以是任何东西,因此,如果您有foo如下所示:

let foo = true
if(foo) {
   foo()
}

这是一个错误,因为您试图调用的不是函数。

那么这段代码到底要测试什么?如果声明了名称foo并且等于诸如0undefined之类的虚假值,它将不会调用该函数,但是在其他情况下,它将崩溃。看起来它正在尝试保护您免受错误的侵害,但除非存在声明了该名称但可能未定义的其他上下文,否则它实际上并没有。

可以保证声明foo的通用上下文是在函数foo作为参数的内部。像这样的示例中的代码更有意义:

someFunction(foo){
    if(foo) {
       foo()
    }
}

在这里您可以期望foo存在,但是您仍然需要相信调用方已经传递了一个函数。这将防止被调用方不传递参数的情况。 (即致电someFunction()