Avatar ·

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