Почему регистрация выражения функции выполняет функцию без вызова?
Эта функция
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
декларация.