首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

JavaScript 參數傳遞:基本類型 vs 引用類型的作用域陷阱

     編輯:程式設計綜合問答

代碼示例

window.onload = function() {
    var a = 1, b = 2;
    plus(a, b);
    function plus(a, b) {
        a = a + b; // 此處 a 是形參,遮蔽外層 a
        b = 0;
        // 外層 a,b 不變
    }
};

核心規則

  • 基本類型(數值、字符串、布爾、null、undefined、Symbol):按值傳遞。函數內修改形參不影響實參。
  • 引用類型(對象、數組、函數):按引用傳遞(實際是引用的值傳遞)。函數內修改對象屬性會影響外部;但重新賦值形參(`obj = {}`)不影響外部引用。

驗證代碼

var obj = {a:1, b:2};
function plus(o) {
    o.a = o.a + o.b; // 修改屬性 → 外部可見
    o.b = 0;
    o = {x:99};      // 重新賦值 → 外部不可見
}
plus(obj);
console.log(obj); // {a:3, b:0}

最佳實踐

  1. 函數參數盡量不可變,需修改時返回新對象。
  2. 若需修改外部變量,封裝為對象屬性或使用閉包/模塊模式管理狀態。
  3. ES6 解構賦值、默認參數、剩余參數可減少混淆。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved