Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Не понимаю связь между двумя функциями (https://javascript.ru/forum/misc/73034-ne-ponimayu-svyaz-mezhdu-dvumya-funkciyami.html)

9karamba 15.03.2018 21:21

Не понимаю связь между двумя функциями
 
function MakeMultiFilter(originalArray){
//я еще не написала
}

// вызов MakeMultiFilter() with originalArray = [1,2,3] возвращает функцию, сохраненную в переменную arrayFilterer1,
//that can be used to repeatedly filter the input array 
var arrayFilterer1 = MakeMultiFilter([1,2,3]); 

// вызов arrayFilterer1 (с callback функцией) чтобы отфильтровать все числа не равные 2
arrayFilterer1(function (elem) {
return elem !== 2; // check if element is not equal to 2
}, function (currentArray) {
console.log(this); // 'this' должно выводить originalArray который [1,2,3]
console.log(currentArray); // prints [1, 3]
});


Мне нужно написать функцию MakeMultiFilter, но я не понимаю связи arrayFilterer1 и MakeMultiFilter. arrayFilterer1 сначала приравнивается к MakeMultiFilter, а затем мы вызываем arrayFilterer1 с помощью 2 параметров-функций - как это вообще? Не понимаю эту связь, объясните мне кто нибудь.

В задании написано: Определите глобальную функцию MakeMultiFilter, которая принимает на вход массив originalArray как параметр и возвращает функцию, которая может быть использована в качестве фильтра для элементов массива.

рони 15.03.2018 21:39

9karamba,
function MakeMultiFilter(originalArray){
  return function(fn) {
      var temp = [];
      for (var i=0; i<originalArray.length; i++)  {
        //....
      }
      return temp
}

}

рони 16.03.2018 13:00

:write:
<script>
function MakeMultiFilter(originalArray) {
  return function(fun, callback) {
    var currentArray = [];
    for (var i = 0; i < originalArray.length; i++) {
      var val = originalArray[i];
      if (fun(val)) {
        currentArray.push(val);
      }
    }
    if (callback) {
      callback.call(originalArray, currentArray);
    }
    return currentArray;
  };
}

// вызов MakeMultiFilter() with originalArray = [1,2,3] возвращает функцию, сохраненную в переменную arrayFilterer1,
//that can be used to repeatedly filter the input array
var arrayFilterer1 = MakeMultiFilter([1,2,3]);

// вызов arrayFilterer1 (с callback функцией) чтобы отфильтровать все числа не равные 2
arrayFilterer1(function (elem) {
return elem !== 2; // check if element is not equal to 2
}, function (currentArray) {
console.log(this); // 'this' должно выводить originalArray который [1,2,3]
console.log(currentArray); // prints [1, 3]
});

  </script>


Часовой пояс GMT +3, время: 06:30.