Найти тему
Хочу в Сеньёры

Параметры функции, что нужно знать? [JS]

Добрый день, сегодня мы поговорим, о том, что нужно знать при передаче параметров внутрь функции в js.

Допустим, что у нас есть простая функция которая принимает два аргумента и выводит их в консоль.

Простая функция с двумя входными параметрами
Простая функция с двумя входными параметрами

В целом все просто, мы создали две переменные a и b вызвали функцию с этими переменами и вывели их в консоль, но действительно ли те две переменные внутри это одно тоже что и переменные которые мы положили? Тут я имею ввиду, мы же можем поменять имена для переменных и все будет по прежнему работать, к примеру в функции будут параметры не а и b, а например c и d.

Уникальные имена внутри функции
Уникальные имена внутри функции

Хорошо, теперь мы знаем, что так же можно изменить имена для удобной работы внутри функции, но что еще мы должны знать?

Например как работает изменение одной из переменных или как использовать значения по умолчанию? Много чего еще можно спросить относительно работы функций, но сегодня мы обсудим только две темы

  • Возможно ли изменение переменной внутри функции и если да, то как?
  • Как использовать значение по умолчанию и как это использовать если у вас много параметров?

Начнем с изменения одной из переменных. Сразу скажу, что это возможно, но частично и я покажу как, но чуть позже, а сейчас давайте попробуем просто переписать переменные. Для простоты они были объявлены с помощью let, чтобы точно можно было переписать

Попытка изменить переписать переменную внутри функции
Попытка изменить переписать переменную внутри функции

Как видно из результата в консоли ничего не поменялось. На самом деле все поменялось, просто внутри функции, если обратиться внутри функции к переменным a, b, c то они будут равны 1. Но цель была изменить переменные которые находятся за функцией.

В таком случае у нас ничего не получится, если только переменная не является объектом, но и то только частично.

Частичное изменение переменных внутри функции
Частичное изменение переменных внутри функции

Тут вы можете возразить, ты все время пишешь про частичное изменение, но, что это значит?

Это означает, что для объектов и объекто-подобных структур которые передаются по ссылке ты можешь меня их внутренность, но не можешь поменять тип.

Изменение значения свойства объекта
Изменение значения свойства объекта

Для больше наглядности и понимания как это работает можно посмотреть на пример без функции

Изменения свой-ва объекта передающегося по ссылке
Изменения свой-ва объекта передающегося по ссылке

Благодаря этому мы можем сказать, что параметры внутри функции передаются по значению, а это означает, что изменение значения параметра, будет видно только внутри функции. Это одна из причин по которой работают замыкания.

Так с этим разобрались, а что касается значений по умолчанию?

Пример функции с множеством параметров
Пример функции с множеством параметров

Для того, что объявить параметр функции с значением по умолчанию, то достаточно указать рядом чему он равен, к примеру

Пример функции с множеством параметров у которых есть значение по умолчанию
Пример функции с множеством параметров у которых есть значение по умолчанию

Но что если нам нужно не передавать значение в функцию а использовать по умолчанию, в это случае нам поможет undefined

Использовать значения по умолчанию вместо переданного значения
Использовать значения по умолчанию вместо переданного значения

undefined - сообщает функции о том, что значение которое нужно использовать для параметра неопределенно, поэтому возьми значение по умолчанию. Этот трюк работает только c undefined

Надеюсь вам стало чуть понятней как работают параметры функции, если есть вопросы или возражения, то добро пожаловать в комментарии там и обсудим.