Рубрики
Без рубрики

JavaScript ссылки

Несколько лет назад, когда я изучал электронную технику, один из реквизитов был программированием я … Теги с JavaScript.

Несколько лет назад, когда я изучал электронную технику, один из реквизитов был программирование I, II и III. C ++ Был ли я узнал первый язык программирования, и я должен сказать, что это причина, по которой я выбрал свою нынешнюю карьеру (я понял, что ненавидел дело с аппаратным обеспечением). Одним из моих профессоров была старой леди, которая преподавала в коде для написания класса на доске вместо использования компьютера. Хотя я думал, что это пустая трата времени, написание вещей несколько раз помогла мне понять основные концепции.

Я помню класс, когда она объяснила Ссылки и как каждый кусок данных имеет место в памяти. Сначала было трудно понять, но, наконец, она использовала слово « указатель ». Хорошо, я знаю, что такое указатель, и я могу изобразить его (вроде как стрелка, скажем), теперь что? Ну, скажем, у нас есть переменная назван MyFavcar что хранит ценность «Ferrari» Отказ Этот кусок данных хранятся в каком-то памяти компьютера, и его можно получить доступ с использованием его имени, что является указывая в это место в памяти. Итак, когда мы хотим отобразить значение переменной, функции console.log Использует имя переменной как аргумент и получает данные от того, где хранится.

let myFavCar = "Ferrari"
console.log(myFavCar); // prints "Ferrari"

Примитивы против объектов

Если мы хотим переназначить эту ценность «Lamborghini» вместо этого, мы должны начать говорить о Непомышленность И как примитивы ( string , Номер , Boolean , null и undefined ) и неизменный и как Объекты (почти все остальное в JS) может быть модифицированным. Так как мы используем Строка переменная, не похожа на Lamborghini, переопределяет Ferrari . Мы не можем изменить Строка Так что, что произойдет, это то, что MyFavcar теперь указывает на другой Место в память, где сохраняется эта новая стоимость.

let myFavCar = "Ferrari"
myFavCar = "Lamborghini";
console.log(myFavCar); // prints "Lamborghini"

Это имеет много смысла, когда я думаю о строковых методах, возвращающих новую строку вместо модификации текущего строкового значения. Вот почему, если мы хотим сохранить эту новую ценность, мы должны хранить его в новой переменной ( aka , указатель на новое место в памяти).

let text1 = "Hi";
let text2 = "there";
let text3 = text1.concat(" ", text2);
console.log(text3); // prints "Hi there"

// this does not modify text1 or text2 values

Как работает мутация?

А Мутация Это то, что мы хотим избегать во всех расходах, и это означает, что не уверены, что ни один из наших функций не изменит свои аргументы или что-либо за пределами из них. Этот вид функции называется чистая функция (Я узнал, что сегодня!). Всякий раз, когда мы проходим объект в качестве аргумента для функции, эта функция может изменить объект, который снаружи объема. Способ избежать такого рода мутации – использовать оператор по распространению ( ... ) и сохранить копию объекта и изменять и вернуть эту копию.

let customer = {
   name: "John Doe",
   dob: "2/13/1987",
   address: "123 Park Ave",
   subscriptionAct: true,
}

function updateInfo(customer) {
   // create a variable that stores a copy of the object
   // this will be a NEW object
   let customerUpdated = { ...customer }

   // modifies the copy
   customerUpdated.subscriptionAct = false;
   return customerUpdated;
}

// the function will return a new object
// we save it in a variable
customer = updateInfo(customer);

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

Копировать по значению Можно сделать с примитивами, поскольку они не могут быть изменены, они просто создают новое место в памяти для хранения этой новой стоимости (даже если это копия).

let a = "a";
let b = "b";
a = b;
b = "hello";

console.log(b); // prints "hello"
console.log(a); // prints "b"

В этом случае А копирует значение, которое хранится в B , который в этом случае является строкой. После переназначения B Новое значение, мы можем заметить, что А не изменился. Это потому, что он скопировал только ценность, но не ссылается на этот адрес, где B указывает на.

Понимание этих концепций было сложно и очень запутанному в начале, но через несколько лет программирования на разных языках я смог понять, будучи важнейшей частью структур и алгоритмов данных. Я использовал это Статья В качестве ссылки на написание этого поста, что помогло мне понять эти концепции еще больше.

Оригинал: “https://dev.to/dubymarjtr/javascript-references-1k7g”