Параметры и аргументы
Пока наши функции при каждом вызове делали ровно одно и то же. Гораздо полезнее функция, которая умеет работать с разными данными – например, приветствовать любого, чьё имя ей передали:
function greet(name) { console.log(`Привет, ${name}!`);}greet('Ира');greet('Макс');Параметр – имя в круглых скобках объявления. Внутри тела он работает как переменная: значение параметра можно печатать, подставлять в выражения, сравнивать. Отличие от обычной переменной одно: значение не записано в коде заранее – параметр получает его снаружи, при вызове. У greet параметр один – name:
Аргумент – значение в скобках вызова. Именно оно ложится в параметр на время вызова:
function double(x) { console.log(x * 2);}// аргумент – число 21: в x легло 21double(21);// другой вызов – другой аргументdouble(4);Коротко: параметр – имя в объявлении, аргумент – значение при вызове. Параметр ведёт себя как знакомая локальная переменная: существует только внутри функции. Разница лишь в том, что начальное значение он получает из аргумента при вызове:
name. Тело пока не выполняется.Несколько параметров
У функции может быть несколько параметров – их перечисляют через запятую. Аргументы подставляются по порядку: первый – в первый параметр, второй – во второй:
function repeatWord(word, times) { for (let i = 1; i <= times; i++) { console.log(word); }}repeatWord('эхо', 3);Если аргументы не совпали с параметрами
А что будет, если передать больше аргументов, чем параметров? Ошибки не случится: первый аргумент попадёт в name, а для второго здесь нет параметра, поэтому функция его не использует:
function greet(name) { console.log(`Привет, ${name}!`);}// второй аргумент функция здесь не используетgreet('Ира', 'Макс');Меньше – тоже не ошибка. Аргумент не передали? Параметр всё равно будет создан – со значением undefined:
function greet(name) { console.log(`Привет, ${name}!`);}greet();Печатать «Привет, undefined!» гостю без имени не хочется. Для этой проблемы у объявления есть решение: параметру задают значение по умолчанию – через =. Оно используется, если аргумент не передан или передан undefined:
function greet(name = 'гость') { console.log(`Привет, ${name}!`);}// аргумент есть – в name легло 'Ира'greet('Ира');// аргумента нет – в name легло 'гость'greet();// передан undefined – в name снова 'гость'greet(undefined);Аргументом может быть выражение
До сих пор мы писали значения прямо в вызове. Но аргументом может быть и переменная, и целое выражение. Сначала JavaScript вычисляет его, а уже полученное значение передаёт функции:
basket легло 1200.// теперь вы знаете
- Параметр – имя в объявлении, аргумент – значение при вызове
- Параметр – переменная вызова: создаётся заново и живёт только внутри тела
- Аргументом может быть переменная или выражение – передаётся вычисленное значение
- Аргументы ложатся в параметры по порядку: лишние игнорируются, недостающие дают undefined
name = 'гость'в объявлении – значение по умолчанию для пропущенного аргумента
В записи greet('Ира') строка 'Ира' – это…
Что окажется в параметре age?
function profile(name, age) {console.log(name, age);}profile('Ира');
Что напечатает программа?
function double(x) {console.log(x * 2);}const n = 5;double(n + 3);
Объявлено function hello(name = 'друг'), тело печатает «Привет, » и имя. Что напечатает вызов hello()?
Верно ли, что к параметру name можно обратиться и после вызова – снаружи функции?