1

说我有一个功能:

function foo(){
    // do a bunch of stuff, manipulate DOM, etc.
    // and then:
    if(some_condition) return true;
    else return false;
}

由于同时执行函数的“一堆东西”并使用它的返回值会很好,我想知道这样做是否正确:

if( foo() ){ // foo happens right here
    // do some stuff because foo returned true
}

这是正确的语法和用法吗?

4

3 回答 3

1

这绝对没问题。即使foo不返回布尔值,也将强制返回布尔值,因此无论如何都可以这样做。

您所做的只是不将变量替换为foo().

唯一会出现问题的是如果foo()返回不同的值,在这种情况下,如果您希望整个代码中的值相同,则必须将返回值设置为一个变量并改用该变量。

顺便说一句,这是 javascript 的基础知识之一。除非您刚刚开始,否则您应该已经知道这一点。

哦,正如人们在评论中所说,这不是使用函数作为参数。使用函数作为参数将执行此操作:

function bar(a) {
    // do something with a
}
function foo(){ 
    // blah blah blah
}
var thing = bar(foo); // notice no parentheses `()` after foo
// do something with thing
于 2012-12-15T06:20:04.437 回答
1

就像其他人所说的那样,它会按您的预期工作。我只想建议一种优化:

function foo(){
    // do a bunch of stuff, manipulate DOM, etc.
    // and then:
    return !!some_condition;
}

如果some_condition是一个真值(,,,, 1"abc"然后将表示。否则它会表达。{}[]!!some_conditiontruefalse

然后,您可以随意使用它:

if (foo()) { // foo happens right here
    // do some stuff because foo returned true
}
于 2012-12-15T06:31:14.573 回答
0

我觉得还可以吗?你没有使用函数作为参数,你只是这样做:

var ret = foo();
if( ret ){     
}

可能某些浏览器可能会在两者之间进行优化,并且级别非常低。(我想可能是因为在您的情况下,返回值未在其他任何地方使用。)

但是想法/语义保持不变。

于 2012-12-15T06:21:51.083 回答