Vâng, điều này được gọi là một tham số mặc định
Các tham số chức năng mặc định cho phép các tham số chính thức được khởi tạo với các giá trị mặc định nếu không có giá trị hoặc không xác định nào được thông qua.
Cú pháp:
function [name]([param1[ = defaultValue1 ][, ..., paramN[ = defaultValueN ]]]) {
statements
}
Sự miêu tả:
Các tham số của hàm mặc định thành không xác định Tuy nhiên, trong các tình huống có thể hữu ích để đặt một giá trị mặc định khác. Đây là nơi các tham số mặc định có thể giúp đỡ.
Trước đây, chiến lược chung để đặt mặc định là kiểm tra các giá trị tham số trong phần thân của hàm và gán giá trị nếu chúng không được xác định. Nếu không có giá trị nào được cung cấp trong cuộc gọi, giá trị của nó sẽ không được xác định. Bạn sẽ phải đặt kiểm tra có điều kiện để đảm bảo tham số không được xác định
Với các tham số mặc định trong ES2015, việc kiểm tra trong thân hàm không còn cần thiết nữa. Bây giờ bạn có thể chỉ cần đặt một giá trị mặc định trong đầu hàm.
Ví dụ về sự khác biệt:
// OLD METHOD
function multiply(a, b) {
b = (typeof b !== 'undefined') ? b : 1;
return a * b;
}
multiply(5, 2); // 10
multiply(5, 1); // 5
multiply(5); // 5
// NEW METHOD
function multiply(a, b = 1) {
return a * b;
}
multiply(5, 2); // 10
multiply(5, 1); // 5
multiply(5); // 5
Các ví dụ cú pháp khác nhau:
Đệm không xác định so với các giá trị giả mạo khác:
Ngay cả khi giá trị được đặt rõ ràng khi gọi, giá trị của đối số num là giá trị mặc định.
function test(num = 1) {
console.log(typeof num);
}
test(); // 'number' (num is set to 1)
test(undefined); // 'number' (num is set to 1 too)
// test with other falsy values:
test(''); // 'string' (num is set to '')
test(null); // 'object' (num is set to null)
Đánh giá tại thời điểm cuộc gọi:
Đối số mặc định được đánh giá tại thời điểm cuộc gọi, vì vậy không giống như một số ngôn ngữ khác, một đối tượng mới được tạo mỗi khi hàm được gọi.
function append(value, array = []) {
array.push(value);
return array;
}
append(1); //[1]
append(2); //[2], not [1, 2]
// This even applies to functions and variables
function callSomething(thing = something()) {
return thing;
}
function something() {
return 'sth';
}
callSomething(); //sth
Các tham số mặc định có sẵn cho các tham số mặc định sau này:
Params đã gặp có sẵn cho các tham số mặc định sau này
function singularAutoPlural(singular, plural = singular + 's',
rallyingCry = plural + ' ATTACK!!!') {
return [singular, plural, rallyingCry];
}
//["Gecko","Geckos", "Geckos ATTACK!!!"]
singularAutoPlural('Gecko');
//["Fox","Foxes", "Foxes ATTACK!!!"]
singularAutoPlural('Fox', 'Foxes');
//["Deer", "Deer", "Deer ... change."]
singularAutoPlural('Deer', 'Deer', 'Deer peaceably and respectfully \ petition the government for positive change.')
Các chức năng được xác định bên trong cơ thể chức năng:
Được giới thiệu trong Gecko 33 (Firefox 33 / Thunderbird 33 / SeaMonkey 2.30). Các hàm được khai báo trong thân hàm không thể được tham chiếu bên trong các tham số mặc định và ném ReferenceError (hiện là TypeError trong SpiderMonkey, xem lỗi 1022967). Các tham số mặc định luôn được thực hiện trước, khai báo hàm bên trong thân hàm đánh giá sau đó.
// Doesn't work! Throws ReferenceError.
function f(a = go()) {
function go() { return ':P'; }
}
Các tham số không có mặc định sau các tham số mặc định:
Trước Gecko 26 (Firefox 26 / Thunderbird 26 / SeaMonkey 2.23 / Firefox OS 1.2), đoạn mã sau dẫn đến SyntaxError. Điều này đã được sửa trong lỗi 777060 và hoạt động như mong đợi trong các phiên bản sau. Các tham số vẫn được đặt từ trái sang phải, ghi đè các tham số mặc định ngay cả khi có các tham số sau này mà không có mặc định.
function f(x = 1, y) {
return [x, y];
}
f(); // [1, undefined]
f(2); // [2, undefined]
Tham số hủy cấu trúc với gán giá trị mặc định:
Bạn có thể sử dụng gán giá trị mặc định với ký hiệu gán hủy
function f([x, y] = [1, 2], {z: z} = {z: 3}) {
return x + y + z;
}
f(); // 6
function defaultFor(arg, val) { return typeof arg !== 'undefined' ? arg : val; }
và sau đó bạn có thể gọi nó làa = defaultFor(a, 42);