← Назад ко всем вопросам

Как передаются в функцию ссылочные типы данных

1️⃣ Как кратко ответить

Ссылочные типы данных в JavaScript передаются в функцию по ссылке. Это означает, что если функция изменяет объект или массив, переданный ей, изменения будут видны и за пределами функции, так как обе переменные (внутри и снаружи функции) ссылаются на один и тот же объект в памяти.

2️⃣ Подробное объяснение темы

В JavaScript существуют два основных типа данных: примитивные и ссылочные. Примитивные типы включают числа, строки, булевы значения, null, undefined и Symbol. Ссылочные типы включают объекты, массивы и функции.

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

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

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

function modifyObject(obj) {
    // Добавляем новое свойство в объект
    obj.newProperty = 'new value';
}
​
const myObject = {
    existingProperty: 'existing value'
};
​
// Передаем объект в функцию
modifyObject(myObject);
​
// Выводим объект после вызова функции
console.log(myObject);
  1. Объявление функции modifyObject: Функция принимает один параметр obj, который ожидается как объект.

  2. Изменение объекта внутри функции: Внутри функции мы добавляем новое свойство newProperty к объекту obj. Поскольку obj — это ссылка на оригинальный объект myObject, изменения будут видны и за пределами функции.

  3. Создание объекта myObject: Мы создаем объект myObject с одним свойством existingProperty.

  4. Передача объекта в функцию: Мы вызываем функцию modifyObject, передавая в нее myObject. Поскольку объекты передаются по ссылке, obj внутри функции и myObject снаружи функции ссылаются на один и тот же объект в памяти.

  5. Вывод объекта после вызова функции: После вызова функции мы выводим myObject в консоль. Мы увидим, что объект теперь содержит оба свойства: existingProperty и newProperty, что подтверждает, что изменения, сделанные внутри функции, отразились на оригинальном объекте.

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

Тема: JavaScript
Стадия: Tech

🔒 Подпишись на бусти автора и стань Алигатором, чтобы получить полный доступ к функционалу сайта и отслеживать свой прогресс!

Твои заметки