在 JavaScript 的 if 语句中使用不带括号的函数名有什么作用?
What does using a function name without parentheses do in an if statement in JavaScript?
例如:
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/
这段代码只是检查~~一个函数~~是否存在名为 foo
的东西~~,因此可以安全地调用~~。
另一方面,如果你这样做 if (foo())
,if 块中的代码只会在 foo() return 等同于 true
.[=13 的情况下执行=]
您的代码定义了一个带有两个参数的全局函数 foo。
之后有一个 if 语句来检查 foo 是否为真(foo 是您的函数,因此为真)。所以它调用函数 foo。 但要小心,如果没有定义 foo,您的代码将抛出 ReferenceError。
检查函数是否存在的更好方法是:
if (typeof foo === "function") {
// safe to use the function foo
}
就其本身而言,尚不清楚这段代码应该如何提供帮助。也许有更多的上下文会很清楚。
考虑这些选项:
1.函数 foo
从未定义:
如果未声明 [=13=] 则:
if(foo) {}
是参考错误。它崩溃了。
2。 Foo 已定义,但它不是函数
foo
可以是任何东西,所以如果你的 foo
看起来像这样:
let foo = true
if(foo) {
foo()
}
这是一个错误,因为您正在尝试调用不是函数的东西。
那么这段代码究竟要测试什么?如果声明了名称 foo
并且等于某些虚假值,如 0
或 undefined
,它不会调用该函数,但在其他情况下它会崩溃。它看起来像是在试图保护您免受错误,但实际上并没有,除非在其他上下文中声明了名称但可能未定义。
保证声明 foo
的常见上下文是在函数内部,其中 foo
是一个参数。该代码在以下示例中更有意义:
someFunction(foo){
if(foo) {
foo()
}
}
在这里你可以期望 foo
存在,但你仍然需要相信调用者传递了一个函数。这将防止被调用者不传递参数的情况。 (即调用 someFunction()
)
例如:
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/
这段代码只是检查~~一个函数~~是否存在名为 foo
的东西~~,因此可以安全地调用~~。
另一方面,如果你这样做 if (foo())
,if 块中的代码只会在 foo() return 等同于 true
.[=13 的情况下执行=]
您的代码定义了一个带有两个参数的全局函数 foo。
之后有一个 if 语句来检查 foo 是否为真(foo 是您的函数,因此为真)。所以它调用函数 foo。 但要小心,如果没有定义 foo,您的代码将抛出 ReferenceError。
检查函数是否存在的更好方法是:
if (typeof foo === "function") {
// safe to use the function foo
}
就其本身而言,尚不清楚这段代码应该如何提供帮助。也许有更多的上下文会很清楚。
考虑这些选项:
1.函数 foo
从未定义:
如果未声明 [=13=] 则:
if(foo) {}
是参考错误。它崩溃了。
2。 Foo 已定义,但它不是函数
foo
可以是任何东西,所以如果你的 foo
看起来像这样:
let foo = true
if(foo) {
foo()
}
这是一个错误,因为您正在尝试调用不是函数的东西。
那么这段代码究竟要测试什么?如果声明了名称 foo
并且等于某些虚假值,如 0
或 undefined
,它不会调用该函数,但在其他情况下它会崩溃。它看起来像是在试图保护您免受错误,但实际上并没有,除非在其他上下文中声明了名称但可能未定义。
保证声明 foo
的常见上下文是在函数内部,其中 foo
是一个参数。该代码在以下示例中更有意义:
someFunction(foo){
if(foo) {
foo()
}
}
在这里你可以期望 foo
存在,但你仍然需要相信调用者传递了一个函数。这将防止被调用者不传递参数的情况。 (即调用 someFunction()
)