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
</script>
</body>
</html>
Đặc điểm chính
- Default expression evaluate mỗi lần gọi (neu default là function call, object literal...).
- Chỉ trigger khi argument là
undefined(hoặc không truyền).nullkhông trigger. - Có thể tham chiếu parameter trước:
function f(a = 1, b = a * 2) {}. - Destructuring với default:
function f({x = 1, y = 2} = {}) {}.
Default Parameters vs Arguments Object
arguments object không reflect default values. Chỉ chứa args thực tế truyền vào. Dùng rest params ...args thay thế.
Pattern: Options Object (Best cho nhiều params)
function createUser({ name = "Guest", age = 18, role = "user" } = {}) {
return { name, age, role };
}
createUser(); // {name: "Guest", age: 18, role: "user"}
createUser({ name: "Alice" }); // {name: "Alice", age: 18, role: "user"}
createUser({ age: 25, role: "admin" }); // {name: "Guest", age: 25, role: "admin"}
Lưu ý
- Tránh mutable default (array/object literal) → shared reference bug. Dùng
nulldefault + init bên trong. - Default parameter scope: có thể truy cập biến outer scope, nhưng không truy cập parameter sau (chưa khởi tạo).