Почему регистрация выражения функции выполняет функцию без вызова?

Эта функция

function mapForEach(arr, fn) {

  var newArr = [];
  for (var i = 0; i < arr.length; i++) {
    newArr.push(
      fn(arr[i])
    )
  };

  return newArr;
}

var arr1 = [1, 2, 3];

вызывается

mapForEach(arr1, function (item) {
  return item * 2;
}); // [2,4,6]

и не вызывается этим объявлением переменной

var arr2 = mapForEach(arr1, function (item) {
  return item * 2;
});

еще вызывается при входе в консоль

console.log(arr2); // [2,4,6] in the console

почему здесь не нужен вызов?

console.log(arr2());

Мне все еще не ясно, чем это отличается от

function foo () { return 2 === 2 };

определение функции журналов

console.log(foo); // function foo() { return 2 === 2 } 

вызывается в функции журнала, регистрирует возвращаемое значение

console.log(foo()); // true

1 ответ

Я думаю, что здесь происходит лишь небольшая путаница из-за поведения в консоли JavaScript или возвращаемого значения из var декларация.

Консоль всегда будет отображать значение того, что вы вводите. Например, возвращаемое значение вызова функции. Однако возвращаемое значение var является undefined, Это означает, что в то время как mapForEach без назначения будет отображаться [2,4,6] функция действительно вызывается в обоих случаях, просто var arr2 = то, что вы ожидали, не отображается.

Посмотрите этот вопрос для получения дополнительной информации о возвращаемом значении из var декларация.

Другие вопросы по тегам