我可以将函数作为参数调用吗?

时间:2012-12-15 06:17:46

标签: javascript parameters boolean

说我有一个功能:

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
}

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

3 个答案:

答案 0 :(得分:1)

这绝对没问题。即使foo没有返回布尔值,返回也将被强制为boolean,所以无论如何都可以这样做。

您正在做的只是不将变量替换为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

答案 1 :(得分:1)

像其他人一样,它会像你期望的那样工作。我想建议一个优化:

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

如果some_condition是真值(1"abc"{}[]),那么!!some_condition将表达true }。否则它将表达false

然后您可以按照自己的意愿使用它:

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

答案 2 :(得分:0)

好像对我好吗?你没有使用函数作为参数,你只是这样做:

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

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

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