Пройти по значению или пройти по ссылке? JavaScript

В JavaScript у нас есть функции, и у нас есть аргументы, которые мы передаем этим функциям. Но как JavaScript обрабатывает то, что вы проходите, не всегда ясно. Нет никакой «передачи по ссылке» для любой переменной в JavaScript. Все переменные и аргументы назначаются значением, но для объектов значение переменной является ссылкой. Из-за этого, когда вы передаете объект и меняете его члены, эти изменения сохраняются вне функции. Это заставляет его выглядеть как ссылка. Итак, примитивные значения типа number, string, boolean передаются по значению, тогда как объекты и массивы передаются по ссылке, как указано выше.

С примитивными типами данных

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

 
var toDay = "Sunday";
function changeDay(tmpDay){
  tmpDay = "Monday";
}
alert(toDay); // "Воскресенье"
changeDay(toDay);
alert(toDay); // "Воскресенье"

В приведенном выше примере мы меняем переменную «toDay» внутри функции changeDay и отображаем ее после вызова функции, она по-прежнему имеет значение «воскресенье». Это происходит потому, что когда примитивные типы передаются по значению. Это означает, что любые изменения этой переменной в функции полностью отделены от всего, что происходит вне функции. Это то, что имеется в виду, когда мы говорим, что мы передаем значение в JavaScript.

С объектами

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

 
var thisWeek = {
  toDay: "Sunday"
};
function changeDay(tmpWeek){
  tmpWeek.toDay = "Monday";
}
alert(thisWeek.toDay); //Воскресенье
changeDay(thisWeek);
alert(thisWeek.toDay); //Понедельник

В приведенном выше примере мы меняем переменную «toDay» внутри функции changeDay и отображаем ее после вызова функции, значение toDay изменяется на «понедельник». Это связано с тем, что, когда вы передаете объект в функцию, вы не передаете копию. Вы передаете ссылку, указывающую на объект thisWeek. Поэтому, когда вы изменяете свойство этого объекта в функции, вы изменяете свойство объекта во внешней области.

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

Источник: http://net-informations.com/js/iq/pass.htm

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Adblock
detector