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 の基本の 1 つです。始めたばかりでない限り、これはすでに知っているはずです。

ああ、人々がコメントで言ったように、これは関数をパラメーターとして使用していません。関数をパラメーターとして使用すると、次のようになります。

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

他の人が言ったように、期待どおりに機能します。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
}
于 2012-12-15T06:31:14.573 に答える
0

私には大丈夫だと思いますか?関数をパラメーターとして使用していません。これを行っているだけです。

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

ブラウザによっては、この 2 つと非常に低いレベルの間で最適化を行う場合があります。(おそらく、あなたの場合、戻り値が他の場所で使用されていないためだと思います。)

しかし、アイデア/セマンティクスは同じままです。

于 2012-12-15T06:21:51.083 に答える