2017-10-12 20 views
1

做課本練習其中:這個函數的參數是如何傳遞的?

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 

教科書還指出filter語法是:

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

所以我沒有完全理解inBetween(a,b)功能是如何工作的......像在這條線:

arr.filter(inBetween(3,6)) 

在我看來,像aitem參數,bindex參數中,但顯然這不是它的工作方式......有人可以分解這個語法以及爲什麼它的工作原理?

+3

'x'是' item參數'inBetween'返回一個用於過濾器的函數 – 4castle

+0

'inBetween'是一個*高階函數*,它在調用時返回一個函數* –

+0

參見[瞭解返回函數(x)外面的樂趣ction(陣列)](https://stackoverflow.com/q/36664970/1048572) – Bergi

回答

2

所以過濾器方法接受一個函數,該函數應該返回true或false,是否保留該項目。

在這個例子中,而不是寫在過濾器內部的功能,它是寫外面傳入但是你仍然可以考慮一下這樣的:

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

您將定義inBetween過濾器外側的原因是這樣你可以傳入值而不是像上面那樣將它們硬編碼到過濾器中。

當你調用返回inBetween(3,6)是:

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

像上面然後您就放入過濾器(只是沒有index/array參數,因爲它們不需要:

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

ab36inBetween範圍被定義和引用的所述返回的匿名功能這是.filter()回調,通過4castle所示內,xitem在回調函數

相關問題