例如:
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/
答案 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
并且等于诸如0
或undefined
之类的虚假值,它将不会调用该函数,但是在其他情况下,它将崩溃。看起来它正在尝试保护您免受错误的侵害,但除非存在声明了该名称但可能未定义的其他上下文,否则它实际上并没有。
可以保证声明foo
的通用上下文是在函数foo
作为参数的内部。像这样的示例中的代码更有意义:
someFunction(foo){
if(foo) {
foo()
}
}
在这里您可以期望foo
存在,但是您仍然需要相信调用方已经传递了一个函数。这将防止被调用方不传递参数的情况。 (即致电someFunction()
)