2017-03-05 10 views
3

は、高次機能の雄弁のJavascript章で作業変更、私はこの例accrossに来た:forループが含まれるように再書かれ中括弧が出力

function reduce(array, combine, start) { 
    var current = start; 
    for (var i = 0; i < array.length; i++) 
    current = combine(current, array[i]); 
    return current; 
} 

console.log(reduce([1, 2, 3, 4], function(a, b) { 
    return a + b; 
}, 0)); 
// → 10 

、どのようなI結果は、だけではなく、中括弧は、出力を変更するために、ここでやっている期待される10の1である

function reduce(array, combine, start) { 
    var current = start; 
    for (var i = 0; i < array.length; i++) { 
    current = combine(current, array[i]); 
    return current; 
    } 
} 

console.log(reduce([1, 2, 3, 4], function(a, b) { 
    return a + b; 
}, 0)); 
// → 1 

:のように、オプションで、中括弧と思っていましたか?あなたがそれらを尋ねたとして

+1

中括弧はループ本体内に 'return current;' run **を入れます。したがって、最初の反復では関数を終了します。中カッコがなければ、 'return current;は**ループ本体の後**です。 –

答えて

5

forループのブロック外でreturnステートメントを移動する必要があります。これは、returnステートメントが関数とループを直ちに終了するためです。

for (var i = 0; i < array.length; i++) { 
    current = combine(current, array[i]); 
} 
return current; 

function reduce(array, combine, start) { 
 
    var current = start; 
 
    for (var i = 0; i < array.length; i++) { 
 
     current = combine(current, array[i]); 
 
    } 
 
    return current; 
 
} 
 

 
console.log(reduce([1, 2, 3, 4], function(a, b) { 
 
    return a + b; 
 
}, 0));

6

中括弧だけでやっている:あなたはforループ内return文が含まれているため:

function reduce(array, combine, start) { 
    var current = start; 
    for (var i = 0; i < array.length; i++) { 
    current = combine(current, array[i]); 
    return current; 
    } 
} 

ループは、実際に、リターンがループを終了したために意図されたものの短い停止します関数が返されたときに、配列の最初の要素の値:1がvar currentにフォールディングされ、1を出力します。 forが値を返す前に、すべての配列要素を折り畳むため10:一方:

function reduce(array, combine, start) { 
    var current = start; 
    for (var i = 0; i < array.length; i++) { 
    current = combine(current, array[i]); 
    } 
    return current; 
} 

すると予想される出力を返します。

3

このコードは、一度ループを実行し、右の第1サイクル後に返します。

for (var i = 0; i < array.length; i++) 
    current = combine(current, array[i]); 
return current; 
:ループはサイクリングを終えた後

for (var i = 0; i < array.length; i++) { 
    current = combine(current, array[i]); 
    return current; 
} 

ここでは、返します