Работа с переменными по ссылке в JavaScript: циклы и массивы

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

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

Рассмотрим следующий код:

JS
Скопировать код
function addProperty(obj) {
  obj.newProp = 'added';
}

let myObj = {};
addProperty(myObj);
console.log(myObj.newProp);  // выводит 'added'

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

Кинга Идем в IT: пошаговый план для смены профессии

Разбираем особенности ссылок на переменные

Манипуляции с объектами "на месте"

В JavaScript нет прямого способа передачи переменных по ссылке, но "передачу по ссылке" можно эмулировать, оперируя свойствами объекта.

Подробнее об этом расскажет наш спикер на видео
skypro youtube speaker

Замыкания как инструмент хранения состояния

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

Инкапсуляция для повышения читаемости кода

Для улучшения читаемости кода инкапсулируйте ваши операции с переменными внутри функций.

"Магия" геттеров и сеттеров

Применение геттеров и сеттеров в пользовательских объектах, через Object.defineProperty, позволяет имитировать передачу по ссылке.

Что знать для настоящего волшебника кода

Переназначение ссылок и его последствия

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

Остерегайтесь использования eval

Исключите использование eval, так как это может создать проблемы безопасности и снизить производительность.

Важность контекста

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

Визуализация

Допустим у нас есть игровая сессия с персонажами:

JS
Скопировать код
let player1 = { name: '🧙‍♂️ Маг', health: 100 };
let player2 = { name: '🧝‍♂️ Эльф', health: 100 };

function castHealingSpell(character) {
  character.health += 30;
}

castHealingSpell(player1);

Результат:

Markdown
Скопировать код
До заклинания: 🧙‍♂️ Здоровье = 100 
После заклинания: 🧙‍♂️ Здоровье = 130

Здоровье персонажа увеличилось благодаря заклинанию лечения – объект был изменен.

Навыки управления переменными: Большим количеством методов – больше возможностей

Функции как помощники

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

Будьте аккуратны с массивами

При работе с массивами помните, что изменение элементов не влияет на ссылку на массив, в то время как присваивание нового массива переменной изменяет ссылку.

Инкапсуляция и IIFE

Использование немедленно вызывающихся функций (IIFE) способствует созданию областей видимости для управления ссылками на переменные.

Практикуйте эти рекомендации, чтобы особенности управления переменными стали естественными.

Полезные материалы

  1. Создание объектов – JavaScript | MDN — Сведения о создании объектов в JavaScript и их свойствах.
  2. Передает ли JavaScript аргументы по ссылке или по значению? – Stack Overflow — Дискуссия на тему передачи аргументов в JavaScript.
  3. Ссылки на объекты и их копирование — Особенности работы с объектами и примитивами.
  4. Ссылки и значения в JavaScript – YouTube — Видеоурок, объясняющий особенности передачи значения и ссылки в JavaScript.
  5. JavaScript: передача по значению vs. передача по ссылке | автор Крис Д’Асколи | codeburst — Статья о передаче данных в JavaScript.
  6. Функции высшего порядка :: Выразительный JavaScript — Материал, посвященный концепции функций как значений и композиции функций.
Проверь как ты усвоил материалы статьи
Пройди тест и узнай насколько ты лучше других читателей
Как в JavaScript передаются объекты в функции?
1 / 5