假設我有一個JS
function addMessage(type, txt, refs=[], name="")
我可以用 addMessage(type=type, txt=txt, name=9)
這樣指定輸入參數嗎?

 

 




在 JavaScript 中,函數的參數 不支援 Python 風格的命名參數傳遞(即 addMessage(type=type, txt=txt, name=9) 這種方式是不行的)。

錯誤的方式(Python 風格,JS 不支援)

addMessage(type=type, txt=txt, name=9); //  會報錯


解決方案
方法 1:使用物件作為參數
在 JavaScript 中,通常會使用「物件參數」來模擬命名參數,這樣可以自由指定順序:

function addMessage({ type, txt, refs = [], name = "" }) {
    console.log(type, txt, refs, name);
}

//  可以只傳特定參數
addMessage({ type: "info", txt: "Hello", name: 9 });


優點:

參數可以不按順序傳遞。
可選參數不需要全部傳遞(像 refs 可以省略)。
默認值仍然有效。
方法 2:使用普通傳參
如果你一定要按順序傳參,就只能用普通的函數參數:

function addMessage(type, txt, refs = [], name = "") {
    console.log(type, txt, refs, name);
}

// ✅ 但必須按順序傳遞
addMessage("info", "Hello", [], 9);


缺點:

順序不能改變,如果只想改 name,就得填 refs=[] 這個參數。
建議
最佳方式是「使用物件作為參數」,這樣能讓你的函數更靈活:

addMessage({ txt: "Hello", name: 9, type: "info" }); // ✅ 無需按順序


這樣寫起來就更像 Python 的命名參數傳遞,還能保持 JavaScript 風格!