Полный цикл в digital

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

Передача параметров по значению

Строки, числа, логические значения передаются в функцию по значению. Иными словами при передаче значения в функцию, эта функция получает копию данного значения. Рассмотрим, что это значит в практическом плане:

function change(x){
x = 2 * x;
console.log("x in change:", x);
}
var n = 10;
// n before change: 10
console.log("n before change:", n); 
// x in change: 20
change(n);          
// n after change: 10                
console.log("n after change:", n);

Функция change получает некоторое число и увеличивает его в два раза. При вызове функции change ей передается число n. Однако после вызова функции мы видим, что число n не изменилось, хотя в самой функции произошло увеличение значения параметра. Потому что при вызове функция change получает копию значения переменной n. И любые изменения с этой копией никак не затрагивают саму переменную n.

Передача по ссылке

Объекты и массивы передаются по ссылке. То есть функция получает сам объект или массив, а не их копию:

function change(user){
user.name = "Tom";
}
var bob ={ 
name: "Bob"
};
// Bob
console.log("before change:", bob.name);    
change(bob);
// Tom
console.log("after change:", bob.name);

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

Однако если мы попробуем переустановить объект или массив полностью, оригинальное значение не изменится:

function change(user){
// полная переустановка объекта
user= {
name:"Tom"
};
}
var bob ={ 
name: "Bob"
};
// Bob
console.log("before change:", bob.name);    
change(bob);
// Bob
console.log("after change:", bob.name);

То же самое касается массивов:

function change(array){
array[0] = 8;
}
function changeFull(array){
array = [9, 8, 7];
}
var numbers = [1, 2, 3];
// [1, 2, 3]
console.log("before change:", numbers);     
change(numbers);
// [8, 2, 3]
console.log("after change:", numbers);      
changeFull(numbers);
// [8, 2, 3]
Заполните форму уже сегодня!
Для начала сотрудничества необходимо заполнить заявку или заказать обратный звонок. В ответ получите коммерческое предложение, которое будет содержать индивидуальную стратегию с учетом требований и поставленных задач
Работаем по будням с 9:00 до 18:00. Заявки, отправленные в выходные, обрабатываем в первый рабочий день до 12:00.
Спасибо, ваш запрос принят и будет обработан!
Эйч Маркетинг