2017-10-12 33 views
1

は教科書の練習行う:ような...この関数ではどのようにパラメータが渡されますか?

let results = arr.filter(function(item, index, array) { 
    // should return true if the item passes the filter 
}); 

だから私はinBetween(a,b)機能がどのように機能するかを完全に理解していないよ:教科書もfilter構文がすると述べて

let arr = [1, 2, 3, 4, 5, 6, 7]; 

function inBetween(a, b) { 
    return function(x) { 
    return x >= a && x <= b; 
    }; 
} 

alert(arr.filter(inBetween(3, 6))); // 3,4,5,6 

をこの行に:aがあるよう

arr.filter(inBetween(3,6)) 

それは私には思われますパラメータbindexのパラメータに含まれていますが、明らかにそれが動作しているわけではありません。誰かがこの構文を分解して動作する理由は?

+3

を 'X'は 'フィルタに使用される関数を返す – 4castle

+0

'inBetween'は高次関数*である。*呼び出されたときに関数を返す* –

+0

関連項目[戻り関数(x)からの理解]外の楽しみction(配列)](https://stackoverflow.com/q/36664970/1048572) – Bergi

答えて

2

itemされるようにfilterメソッドは、項目を保持するかどうかにかかわらず、trueまたはfalseを返す関数を受け入れます。代わりに、フィルタの内側にその関数を書くのこの例では

は、それが外に書かれており、中に渡されたしかし、あなたはまだこのようにそれについて考えることができます。あなたは、フィルタの外inBetweenを定義し

let results = arr.filter(function(item, index, array) { 
    return item >= 3 && item <= 6; 
}); 

理由上記のようなフィルタにハードコーディングするのではなく、値を渡すことができます。あなたはinBetween(3,6)が返さ呼び出す

は次のとおりです。彼らを必要としないので、それ以上のように

function(x) { 
    return x >= 3 && x <= 6; 
} 

はその後、ちょうどindex/arrayパラメータなし(フィルターに入れています:

let results = arr.filter(function(x) { 
    return x >= 3 && x <= 6; 
}); 
0

ab34castleによって示されるように、6は、.filter()のコールバックで返された匿名関数内inBetweenの範囲で定義され、参照され、xは、コールバック関数

関連する問題