Вызов вложенной функции Javascript всегда возвращает значение true - PullRequest
0 голосов
/ 09 января 2019

Работает следующий код JavaScript:

const numbers = [10, 15, 20, 25, 30];

function nesting(array, iteratorFunction) {
  let f2 = function(b){
        return false;
      }
  return array.filter(
    function(a){
      return f2(a)
    }   
   );
}

Результат равен [], если f2 возвращает false, и [10, 15, 20, 25, 30], если f2 изменяется для возврата true.

Почему он не работает правильно после этой замены направления, когда я просто заменил переменную f2 исходным определением f2?

function nesting(array, iteratorFunction) {
  return array.filter(
    function(a){
      return function(b){
        return false;
      }
    }   
   );
}

Возвращает [10, 15, 20, 25, 30] независимо от того, возвращает ли внутренняя функция true или false. Зачем? Какие знания о javascript мне не хватает?

Ответы [ 2 ]

0 голосов
/ 09 января 2019

Во втором фрагменте вы никогда не выполняете функцию f2

function nesting(array, iteratorFunction) {
  return array.filter(
    function(a){
      return function(b){
        return false;
      }(a)
    }   
   );
}
0 голосов
/ 09 января 2019

Коды не эквивалентны.

В первом примере вы вызываете f2, а затем используете то, что возвращается для фильтрации.

Во втором примере вы никогда не вызываете функцию ; вы возвращаете невостребованную функцию в функции фильтрации. Поскольку сами функции являются достоверными, он допускает все элементы независимо от того, что возвращает функция.

Чтобы сделать его эквивалентным, вам нужно вызвать внутреннюю функцию:

. . . 
function(a){
  return (function(b){
    return false;
  })(a); // Add parenthesis to call
}
. . . 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...