В JavaScript параметры функции передаются по значению (value).

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

Рассмотрим пример:

function changeValue(x) {
  x = 2
  console.log(x) // Выводит 2
}
 
var a = 1
changeValue(a)
console.log(a) // Выводит 1

В этом примере мы создали функцию “changeValue”, которая принимает параметр “x” и присваивает ему значение 2. Затем мы создали переменную “a” со значением 1 и передали ее в функцию “changeValue”. После этого мы вывели значение переменной “a” в консоль. Как видно из результатов, значение переменной “a” не изменилось, оно по-прежнему равно 1.

Это произошло потому, что при вызове функции “changeValue” значение переменной “a” было скопировано в параметр “x”, и функция работала с копией значения. Изменение значения параметра “x” не повлияло на значение переменной “a”, потому что это разные переменные.

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

Рассмотрим пример:

function changeObject(obj) {
  obj.prop = "new value"
  console.log(obj.prop) // Выводит "new value"
}
 
var myObject = { prop: "old value" }
changeObject(myObject)
console.log(myObject.prop) // Выводит "new value"

В этом примере мы создали функцию “changeObject”, которая принимает объект “obj” и изменяет его свойство “prop”. Затем мы создали объект “myObject” со свойством “prop” со значением “old value” и передали его в функцию “changeObject”. После этого мы вывели значение свойства “prop” объекта “myObject” в консоль. Как видно из результатов, значение свойства “prop” изменилось на “new value”.

Это произошло потому, что при передаче объекта в функцию копируется ссылка на объект, а не сам объект. Таким образом, функция “changeObject” работает с тем же объектом, что и за пределами функции, и изменения, сделанные внутри функции, видны и за ее пределами.


Назад