4

一部の開発者は、次のようなJavaScript関数の最後にリターンを配置するのを見てきました。

$(".items").each(function(){
    mthis = $(this);
    var xposition = some .x() position value;
    if(xposition < 0){
        mthis.remove();
        return;
    }
});

返品も必要ですか?私はそれreturn falseがループから早くキャンセルされることを知っています、そして私はそれreturn xが値を返すことを知っています、しかしただ戻るだけですか?どういう意味ですか?

申し訳ありませんが、コードの最後に}を付けるのを忘れました。戻り値はif条件付きです。


新しい更新-ループの目的が、ループに入ったn番目の.itemをキャンセルすることであることがわかりました。したがって、return falseは、単純なreturnの代わりになります。(とにかく未定義を意味します)。助けてくれてありがとう!

4

6 に答える 6

3

関数の最後で先に進まないで戻っても、実際には何もしません。ただし、「this」を返すと、メソッドの連鎖が可能になります。

于 2012-10-03T13:42:24.343 に答える
2

あなたの例はjQuery.each、ループ関数からの戻り値を処理する方法に固有のものです。ドキュメントから:

コールバック関数がfalseを返すようにすることで、特定の反復で$ .each()ループを中断できます。false以外を返すことは、forループのcontinueステートメントと同じです。すぐに次の反復にスキップします。

これで、違いがないこと以外は何も返さずfalse、次の反復に進むだけです。falseただし、ループを中断します。

return;とまったく同じであることに注意してくださいreturn undefined;

于 2012-10-03T13:46:51.577 に答える
1

これは、必ずしも適切な戻り値を選択しなくても、関数の実行を終了する方法にすぎません。関数の最後では、実際には違いはありません。

于 2012-10-03T13:39:42.367 に答える
1

と同じようreturn falseに、ブロック(この場合は関数)を早期にキャンセルします。戻り値はになりますundefined

関数の終わりでは、returnステートメントをまったく使用しないのと同じですが、あなたの例は私には関数の終わりのようには見えません。

編集:少し明確にするために:この特定のreturnステートメントはif、関数全体ではなく、周囲の句の最後にあります。つまり、if句の条件は、関数が途中で終了する必要がある状況を指定します。

編集2:「関数」とは、内部の無名関数を指します。return;、と同等であるためreturn undefined;、実際jQuery.each()に次の項目に移動します。(また、関数にもっと多くのコードがあることについて私は間違っていたようです。OPがコードサンプルを編集したことを考えると、それは本当に無意味なreturnステートメントのように見えます。)

于 2012-10-03T13:42:22.673 に答える
1

問題は、開閉{ }ブレースが整列していないことです。そのため、どちらが正しいかによって、パフォーマンスが異なります。ifの閉じ中括弧が戻りの後にある場合、これはcontinue通常のforループのaのように機能します。

$(".items").each(function(){
    mthis = $(this);
    var xposition = some .x() position value;
    if (xposition < 0) {
        mthis.remove();
        return;
    }
}

結局のところcontinue、forループの最後にあるaも暗黙的であるため、これは実際には目的を果たしません。

もちろん、質問がより理論的である場合、答えは一般的に違いがないということです。

function doSomething() {
    alert("Hello, world");
    return; //purely a matter of preference
}

returnここでは、コードブロックの最後にあるため、メソッドを直接呼び出さなくても、メソッドは暗黙的に戻ります。場合によっては、特にネストが多い場合は、関数の最後にいることを示す指標として役立つことがあります。一番下にない場合は、実行された後は何もないので、間違いなく違いreturn;があります。それ以外の場合、違いは純粋に文体です。もちろんそれを省くためにあなたにいくつかの文字を節約します!

于 2012-10-03T13:51:37.217 に答える
1

リターンの振る舞い; 関数内のどこでも、コードが関数の最後に到達したときとまったく同じですが、呼び出し元は未定義を受け取ります。

そのコードでは、条件と一緒に使用されます。私はあなたが完全なコードを見せなかったと仮定しなければならないでしょう。

このメソッドは、前提条件が満たされていない場合に関数の最後にジャンプするためによく使用されます。これは、それぞれが別の条件を持つ5つのインデントよりも読みやすい場合があるためです。

于 2012-10-03T13:52:21.003 に答える