Avatar ·

JavaScript: передача по значению или по ссылке? Разбираемся с путаницей

السلام عليكم! أنا مبتدئ في JavaScript ولا أستطيع فهم كيفية عمل تمرير الوسائط إلى الدوال في الواقع. في بعض المقالات يكتبون أن JS يمرر كل شيء بالقيمة، وفي أخرى أن الكائنات تُمرر بالمرجع. لقد كتبت كودًا بسيطًا جعلني في حيرة تامة. هذا مثال: ```javascript function changeValue(x) { x = 10; console.log('Внутри функции:', x); } let a = 5; changeValue(a); console.log('После функции:', a); // 5 — всё понятно, число не изменилось ``` هذا واضح — primitive يُمرر بالقيمة. لكن عندما أجرب مع كائن: ```javascript function changeObject(obj) { obj.name = 'Новое имя'; } let user = { name: 'Старое имя' }; changeObject(user); console.log(user.name); // 'Новое имя' — объект изменился! Получается, по ссылке? ``` لكن ما يربكني أكثر هو هذا المثال: ```javascript function replaceObject(obj) { obj = { name: 'Совсем другой объект' }; console.log('Внутри:', obj.name); ```