Книга: Выразительный JavaScript
Передача аргументов
Передача аргументов
Функция noisy
, объявленная ранее, которая передаёт свой аргумент в другую функцию, не совсем удобна.
function noisy(f) {
return function(arg) {
console.log("calling with", arg);
var val = f(arg);
console.log("called with", arg, "- got", val);
return val;
};
}
Если f
принимает больше одного параметра, она получит только первый. Можно было бы добавить кучу аргументов к внутренней функции (arg1
, arg2
и т. д.) и передать все их в f
, но ведь неизвестно, какого количества нам хватит. Кроме того, функция f
не могла бы корректно работать с arguments.length
. Так как мы всё время передавали бы одинаковое число аргументов, было бы неизвестно, сколько аргументов нам было задано изначально.
Для таких случаев у функций в JavaScript есть метод apply
. Ему передают массив (или объект в виде массива) из аргументов, а он вызывает функцию с этими аргументами.
function transparentWrapping(f) {
return function() {
return f.apply(null, arguments);
};
}
Данная функция бесполезна, но она демонстрирует интересующий нас шаблон – возвращаемая ею функция передаёт в f
все полученные ею аргументы, но не более того. Происходит это при помощи передачи её собственных аргументов, хранящихся в объекте arguments
, в метод apply
. Первый аргумент метода apply
, которому мы в данном случае присваиваем null
, можно использовать для эмуляции вызова метода. Мы вернёмся к этому вопросу в следующей главе.
- Передача параметров
- Передача объектов методам по ссылке
- Пример 11-16. Передача переменных во вложенный сценарий awk, с помощью export
- Передача аргументов новым потокам
- Передача прав
- 6.4.2. Передача номенклатурных позиций между ячейками склада
- Глава 11 Передача во временное пользование и заказы
- Глава 10 Передача файлов
- 5.3.8. Защищенная передача данных
- 10.1.3. Передача файлов
- 26.7. Обработка дополнительных аргументов
- Пример 12-39. Использование seq для генерации списка аргументов цикла for