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);
```