Default parameters (ES6) xử lý tham số function dễ dàng. Cho phép khởi tạo tham số với giá trị mặc định nếu không truyền hoặc truyền undefined.
Ví dụ
<html>
<body>
<script>
// default inc = 1
function inc(val1, inc = 1) {
return val1 + inc;
}
document.write(inc(10, 10)); // 20
document.write("<br>");
document.write(inc(10)); // 11 (inc mặc định = 1)
</script>
</body>
</html>
Cú pháp & Đặc điểm
function name(param1 = defaultValue1, param2 = defaultValue2) { ... }
- Default value có thể là bất kỳ expression nào: literal, biến, function call, object, array.
- Được evaluate mỗi lần gọi function (không phải lúc define).
- Truyền
undefinedexplicit → trigger default. Truyềnnull→ không trigger default. - Có thể tham chiếu tham số trước:
function f(a = 1, b = a + 1) {}.
Ví dụ nâng cao
// Function call as default
function fetchData(url, timeout = getDefaultTimeout()) { ... }
// Object/Array default (cẩn thận shared reference!)
function addItem(item, list = []) { // ❌ Bug: same array shared across calls
list.push(item);
return list;
}
function addItemFixed(item, list = null) { // ✅
if (!list) list = [];
list.push(item);
return list;
}
// Destructuring với default
function connect({ host = "localhost", port = 8080, secure = false } = {}) {
// config object với defaults
}
Default Parameters vs Arguments Object
arguments object không phản ánh default parameters (luôn chứa args thực tế truyền vào). Dùng rest parameters ...args thay thế.
Best Practice
- Luôn đặt default parameters ở cuối danh sách tham số.
- Dùng
null+ check thay vì array/object literal trực tiếp làm default (tránh shared mutable state). - Destructuring params object cho API phức tạp (>3-4 params).
- TypeScript:
function f(x: number = 10): number.