Я пишу функцию JavaScript высшего порядка forEach, которая буквально применяет action, когда мы перебираем каждый элемент в массиве:
function forEach(array, action) {
for (var i = 0; i < array.length; i++)
action(array[i]);
}
Когда я вызываю forEach с действием console.log для распечатки элементов массива, возвращается TypeError: Illegal invocation:
forEach(["Henry", "Juliane","Robert"], console.log);
// TypeError: Illegal invocation
Озадаченный, я попытался создать функцию print, которая делает то же самое, что и console.log:
var print = function(value) {
console.log(value);
};
Теперь, когда я вызываю forEach в том же массиве с функцией print, я получаю правильные ответы.
forEach(["Henry", "Juliane","Robert"], print);
// "Henry"
// "Juliane"
// "Robert"
Почему мое первое обращение было незаконным? Это потому, что я использую JS-консоль Chrome? Синтаксис выглядит нормально, здесь print и console.log делают то же самое.
this
внутриconsole.log
должен указывать наconsole
. - person Felix Kling   schedule 24.02.2015console.log
будет законным. - person boxspah   schedule 24.02.2015var log = console.log; log(42);
. - person Felix Kling   schedule 24.02.2015