> For the complete documentation index, see [llms.txt](https://strctr.gitbook.io/programming/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://strctr.gitbook.io/programming/01-languages/javascript/01-language/c-functions/c1-functions/02-function-paramenters.md).

# 02. Function Parameters

## Parameters

Функция при вызове может принимать определенные значения, называемые её *параметрами*. Параметры функции в её области видимости являются локальными переменными:

```javascript
function sum(a, b) {
  return a + b;
}
```

## Arguments

Значения параметров, передаваемые при вызове функций называются её *аргументами*. Передаваемые значения копируются в параметры функции и становятся локальными переменными при вызове функции. Вызывать функцию можно с любым число аргументов - это не будет ошибкой.

* Если число переданных аргументов меньше числа объявленных параметров, то недостающие параметры получают значение `undefined`.
* Если в функцию было передано большее число аргументов, то лишние просто игнорируются.

```javascript
sum(2, 2); // 4
sum(2); // sum(2, undefined) => NaN
sum(2, 2, 2); // sum(2, 2) => NaN
```

Аргументы копируются в параметры передаются по значению. Если функция изменяет значение параметра, то это изменение не влияет на глобальный контекст. Однако из этого правила есть исключения для ссылочных типов: если функция изменяет свойства объекта, эти изменения видны для всех переменных, ссылающихся на данный объект:

```javascript
function myFunc(theObject) {
  theObject.brand = "Toyota";
}

const car = {
  brand: "Honda",
  model: "Accord",
  year: 1998
};

console.log(car.brand); // Honda
myFunc(car);
console.log(car); // Toyota
```
