Есть функция, принимающая параметром другую функцию
function filter(arr, actionFunc){
var newArr = [];
for(var i = 0; i < arr.length; i += 1){
if( actionFunc(arr[i]) ){
newArr.push(arr[i]);
}
}
return newArr;
}
Создаем ту самую “вторую” функцию
function inBetween(min, max){
return function inBetweenInner(val){
if( val >= min && val <= max){
return true;
}
return false;
};
}
передаем ее в первую
filter(arrTo5, inBetween(3, 6));
Собственно вопрос - когда мы передает аргументом функцию он вычисляется в результат ее работы где возвращается внутренняя функция
return function `inBetweenInner(val){ ... }`
а параметры 3 и 6 из `
filter(arrTo5, inBetween(3, 6));
уже передались во внутреннюю функцию `как
function inBetweenInner(val){
if( val >= 3 && val <= 6 ){
return true;
}
return false;
}
;
и если подумать как в вызов
filter(arrTo5, inBetween(3, 6));
вторым параметром возвращается результат выполнения функции
inBetween()
тогда можно представить такое:
function filter(arr, actionFunc){
var newArr = [];
for(var i = 0; i < arr.length; i += 1){
if(
function inBetweenInner( arr[i] ){
if( val >= min && val <= max){
return true;
}
return false;
}
){
newArr.push(arr[i]);
}
}
return newArr;
}
Хотя этот код выдаст ошибку, он наглядно объясняет работу техники замыкания в javascript
и каждый раз в цикле текущим параметров уже есть элемент массива
function inBetweenInner( arr[i] ){ ,,, }
Так я понимаю замыкания.
Хочу услышать мнение опытных людей и их советы и исправления если какие-то мои объяснения не соответствуют действительности.
Спасибо.