Как передаются в функцию ссылочные типы данных
1️⃣ Как кратко ответить
Ссылочные типы данных в JavaScript передаются в функцию по ссылке. Это означает, что если функция изменяет объект или массив, переданный ей, изменения будут видны и за пределами функции, так как обе переменные (внутри и снаружи функции) ссылаются на один и тот же объект в памяти.
2️⃣ Подробное объяснение темы
В JavaScript существуют два основных типа данных: примитивные и ссылочные. Примитивные типы включают числа, строки, булевы значения, null, undefined и Symbol. Ссылочные типы включают объекты, массивы и функции.
Когда мы передаем примитивные типы данных в функцию, они передаются по значению. Это означает, что функция получает копию значения, и любые изменения этого значения внутри функции не влияют на оригинальное значение за пределами функции.
Ссылочные типы данных, такие как объекты и массивы, передаются в функцию по ссылке. Это означает, что функция получает ссылку на оригинальный объект или массив, а не его копию. Поэтому любые изменения, которые функция вносит в объект или массив, будут видны и за пределами функции.
Рассмотрим пример:
function modifyObject(obj) {
// Добавляем новое свойство в объект
obj.newProperty = 'new value';
}
const myObject = {
existingProperty: 'existing value'
};
// Передаем объект в функцию
modifyObject(myObject);
// Выводим объект после вызова функции
console.log(myObject);
-
Объявление функции
modifyObject: Функция принимает один параметрobj, который ожидается как объект. -
Изменение объекта внутри функции: Внутри функции мы добавляем новое свойство
newPropertyк объектуobj. Посколькуobj— это ссылка на оригинальный объектmyObject, изменения будут видны и за пределами функции. -
Создание объекта
myObject: Мы создаем объектmyObjectс одним свойствомexistingProperty. -
Передача объекта в функцию: Мы вызываем функцию
modifyObject, передавая в нееmyObject. Поскольку объекты передаются по ссылке,objвнутри функции иmyObjectснаружи функции ссылаются на один и тот же объект в памяти. -
Вывод объекта после вызова функции: После вызова функции мы выводим
myObjectв консоль. Мы увидим, что объект теперь содержит оба свойства:existingPropertyиnewProperty, что подтверждает, что изменения, сделанные внутри функции, отразились на оригинальном объекте.
Это поведение важно учитывать при работе с функциями, чтобы избежать неожиданных изменений данных. Если необходимо избежать изменения оригинального объекта, можно создать его копию перед передачей в функцию.
🔒 Подпишись на бусти автора и стань Алигатором, чтобы получить полный доступ к функционалу сайта и отслеживать свой прогресс!
Подписаться