说我有一个功能:
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
}
这是正确的语法和用法吗?
答案 0 :(得分:1)
这绝对没问题。即使foo
没有返回布尔值,返回也将被强制为boolean,所以无论如何都可以这样做。
您正在做的只是不将变量替换为foo()
的返回值。
唯一一次这是一个问题是如果foo()
返回不同的值,在这种情况下,如果您希望整个代码中的值相同,则必须将返回值设置为变量并使用而是变量。
哦,正如人们在评论中所说,这不是使用函数作为参数。 使用函数作为参数将执行此操作:
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 ){
}
可能某些浏览器可能会在两者之间进行优化,并且可能会进行非常低级别的优化。 (我想也许是因为在你的情况下,返回值不会在其他任何地方使用。)
但是这个想法/语义保持不变。