2016-07-07 2 views
1

以下のコードが1と2を記録せずにfalseを返す理由を理解できません。戻り値がforEachスコープから外れておらず、firstLayerのスコープがfalseを返すのではないでしょうか?そうでなくても、forEachのスコープを壊すことさえありません。どのようにブレーク/ JavaScript関数内のループ関数から完全に戻ってきますか?

var arrayExample = [1,2,3]; 

function firstLayer (arr) { 
    arr.forEach(function (num) { 
    console.log(num); 
    if (num === 2) {return false;} 
    }); 
    return true; 
} 

firstLayer(arrayExample); 

//logs 1,2,3 and returns tru 

電子

+5

「どのように短絡するかArray.forEachはBreakを呼び出すのと同じですか?」(http://stackoverflow.com/questions/2641347/how-to-short-circuit-array-foreach-like-calling-break) – Abaddon666

答えて

0

、このいずれかを試してみてください。それはループのように繰り返すでしょう。それは2で破ると、これは彼らがここでそれをやった方法です3.

var arrayExample = [1,2,3]; 

function firstLayer (arr) { 
    $.each(arr, function (num) { 
    console.log(num); 
    if (num === 2) { 
     return false; 
    } 
    }); 
    return true; 
} 

firstLayer(arrayExample); 

に続行されません。 How to break out of jQuery each Loop

+0

唯一の違いは、ネイティブのforEachメソッドの代わりにjquery関数を使用したことだけです。 – akantoword

+0

はい。彼らの走り方にはいくつかの違いがあると私は信じています。 – Vinz

1

何か特定の理由でのforEachを使用している場合、私はよく分からないが、 forループは、ループから何かを壊す必要がある場合は私のところに行くでしょう。私はあなたがそのようにはforEachを逃れることができるかどうかわからないんだけど、ここでの作業コードです:

var arrayExample = [1,2,3]; 

function firstLayer (arr) { 

for(i=0; i < arr.length; i++){ 
    var num = arr[i]; 
    console.log(num); 

    if(num === 2){ 
     return; 
    } 
    } 
} 

firstLayer(arrayExample); 

希望、これはこれは絶対に普通のことです

+0

なぜリターンは 'for'ループではなく、forEachループで動作するのでしょうか?それともそれだけですか? – akantoword

+2

@jleiなぜなら 'for(...)'は関数ではなく、言語構造体だからです。そして、 'return'はその親関数から出ます。これは' firstLayer() 'です。反対に 'foreach()' _関数は関数のために 'return'を終了します。 – cFreed

1

を支援します。あなたのreturn false;arr.foreach()関数本体の一部です。

したがって、arr.foreach()関数は、num = 2の場合はfalseを返し、そうでない場合はtrueを返します。しかし:

  • 返されたブール値は、外部firstlayer()機能

のコンテキストで使用されることはありません

  • それの後に何の文が存在しないため、この returnは、機能がどのように機能するかに影響を与えませんこの外部関数は、反対に常にtrueを返します。

    +0

    ループ内の各反復後(各console.logの後)には、とにかく暗黙の復帰があると言うのは正しいでしょうか?そう私の戻りfalseは何の違いはありません?もしそうなら、私はこのループからどのように抜け出し、2の後に停止したいのですか? – akantoword

    +1

    @jlei "私の返ってくる偽は違いない?"はいぜったいに。そして、申し訳ありませんが、私は "それはなぜそう働くのですか?"あなたの質問文に含まれていて、「必要なときにそれを動作させる方法」ではありません。タイトルの!この2番目の質問はConnorJohnによって答えられます。あなた自身のコメントに対する回答の答えの下に私のコメントを見てください。 – cFreed

    関連する問題