JavaScript: 按值传递还是按引用传递?理清困惑
大家好!我是JavaScript新手,一直搞不懂函数参数到底是如何传递的。有些文章说JS一切都是按值传递,另一些则说对象是按引用传递。我写了一段简单的代码,结果彻底把我搞糊涂了。
看这个例子:
```javascript
function changeValue(x) {
x = 10;
console.log('Inside function:', x);
}
let a = 5;
changeValue(a);
console.log('After function:', a); // 5 — 很清楚,数字没变
```
这个很清楚——primitive是按值传递。但当我尝试对象时:
```javascript
function changeObject(obj) {
obj.name = 'New name';
}
let user = { name: 'Old name' };
changeObject(user);
console.log(user.name); // 'New name' — 对象变了!看来是按引用?
```
但更让我困惑的是这个例子:
```javascript
function replaceObject(obj) {
obj = { name: 'Completely different object' };
console.log('Inside:', obj.name);
```