Comments 7
Интересно, что бы сказали мудрецы о программах на Javascript в 30 строк?
function forEach(array, action) { for (var i = 0; i < array.length; i++) action(array[i]); } forEach(["Тили", "Мили", "Трямдия"], console.log);
но ведь нельзя просто так взять и передать параметром console.log, выдаст TypeError: Illegal invocation
Как вариант
forEach(["Тили", "Мили", "Трямдия"], console.log.bind(console));
А тут выходит на сцену
['1','2','3'].map(parseInt);
console ожидает в this видеть именно console, а не window, поэтому тут чуточку сложнее.
Я немного о другом. Результат моего примера будет [1, NaN, NaN], однако мы хотели сделать [1,2,3] и это главный tricky case, когда функция map ждет на вход функцию с сигнатурой (value, index, array), а в это время функция parseInt внезапно ожидает на вход два аргумента, первый число для конвертации, второй основание степени. Тут-то мы и обломаемся и bind нас здесь не спасет.
Из:
Т.к. код станет таким:
Только так можно спастись:
Из:
['1','2','3'].map(parseInt);
Т.к. код станет таким:
['1','2','3'].map(function (value, index) {
return parseInt(value, index); // index у нас значение позиции в массиве
}); // out: [1, NaN, NaN]
Только так можно спастись:
['1','2','3'].map(function (key) {
return parseInt(key);
}); // out: [1,2,3]
Sign up to leave a comment.
Выразительный JavaScript: Функции высшего порядка