Ví dụ. Chức năng như tham số
// program to pass a function as a parameter function greet() { return 'Hello'; } // passing function greet() as a parameter function name(user, func) { // accessing passed function const message = func(); console.log(`${message} ${user}`); } name('John', greet); name('Jack', greet); name('Sara', greet);đầu ra
Hello John Hello Jack Hello SaraTrong chương trình trên có hai hàm. function multiply(a, b) { return a * b; } multiply(5, 2); // 10 multiply(5); // NaN ! 0 và function multiply(a, b) { return a * b; } multiply(5, 2); // 10 multiply(5); // NaN ! 1
- Hàm function multiply(a, b) { return a * b; } multiply(5, 2); // 10 multiply(5); // NaN ! 0 nhận hai tham số
- Hàm function multiply(a, b) { return a * b; } multiply(5, 2); // 10 multiply(5); // NaN ! 1 được truyền dưới dạng đối số cho hàm function multiply(a, b) { return a * b; } multiply(5, 2); // 10 multiply(5); // NaN ! 0
Các tham số chức năng mặc định cho phép các tham số đã đặt tên được khởi tạo với các giá trị mặc định nếu không có giá trị nào hoặc function multiply(a, b) { return a * b; } multiply(5, 2); // 10 multiply(5); // NaN ! 3 được truyền
function fnName(param1 = defaultValue1, /* … ,*/ paramN = defaultValueN) { // … }
Trong JavaScript, tham số hàm mặc định là function multiply(a, b) { return a * b; } multiply(5, 2); // 10 multiply(5); // NaN ! 3. Tuy nhiên, thường hữu ích khi đặ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 ích
Trong ví dụ sau, nếu không có giá trị nào được cung cấp cho function multiply(a, b) { return a * b; } multiply(5, 2); // 10 multiply(5); // NaN ! 5 khi function multiply(a, b) { return a * b; } multiply(5, 2); // 10 multiply(5); // NaN ! 6 được gọi, thì giá trị của function multiply(a, b) { return a * b; } multiply(5, 2); // 10 multiply(5); // NaN ! 5 sẽ là function multiply(a, b) { return a * b; } multiply(5, 2); // 10 multiply(5); // NaN ! 3 khi đánh giá function multiply(a, b) { return a * b; } multiply(5, 2); // 10 multiply(5); // NaN ! 9 và function multiply(a, b) { return a * b; } multiply(5, 2); // 10 multiply(5); // NaN ! 6 sẽ trả về Hello John Hello Jack Hello Sara11
function multiply(a, b) { return a * b; } multiply(5, 2); // 10 multiply(5); // NaN !
Trước đây, chiến lược chung để đặt giá trị mặc định là kiểm tra các giá trị tham số trong thân hàm và gán giá trị nếu chúng là function multiply(a, b) { return a * b; } multiply(5, 2); // 10 multiply(5); // NaN ! 3. Trong ví dụ sau, function multiply(a, b) { return a * b; } multiply(5, 2); // 10 multiply(5); // NaN ! 5 được đặt thành Hello John Hello Jack Hello Sara14 nếu function multiply(a, b) { return a * b; } multiply(5, 2); // 10 multiply(5); // NaN ! 6 được gọi chỉ với một đối số
Hello John Hello Jack Hello Sara1
Với các tham số mặc định, 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ể gán Hello John Hello Jack Hello Sara14 làm giá trị mặc định cho function multiply(a, b) { return a * b; } multiply(5, 2); // 10 multiply(5); // NaN ! 5 trong hàm head
function multiply(a, b) { return a * b; } multiply(5, 2); // 10 multiply(5); // NaN ! 0
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 không có giá trị mặc định
function multiply(a, b) { return a * b; } multiply(5, 2); // 10 multiply(5); // NaN ! 1
Ghi chú. Các tham số sau tham số mặc định đầu tiên sẽ không đóng góp vào hàm Hello John Hello Jack Hello Sara18
Trình khởi tạo tham số mặc định sống trong phạm vi riêng của chúng, là cha của phạm vi được tạo cho thân hàm
Điều này có nghĩa là các tham số trước đó có thể được tham chiếu trong phần khởi tạo của các tham số sau này. Tuy nhiên, các hàm và biến được khai báo trong thân hàm không thể được tham chiếu từ các bộ khởi tạo tham số giá trị mặc định; . Điều này cũng bao gồm các biến được khai báo function multiply(a, b) { return a * b; } multiply(5, 2); // 10 multiply(5); // NaN ! 00 trong thân hàm
Ví dụ: hàm sau sẽ đưa ra một giá trị Hello John Hello Jack Hello Sara19 khi được gọi, vì giá trị tham số mặc định không có quyền truy cập vào phạm vi con của thân hàm
function multiply(a, b) { return a * b; } multiply(5, 2); // 10 multiply(5); // NaN ! 6
Hàm này sẽ in giá trị của tham số function multiply(a, b) { return a * b; } multiply(5, 2); // 10 multiply(5); // NaN ! 02, vì biến function multiply(a, b) { return a * b; } multiply(5, 2); // 10 multiply(5); // NaN ! 03 chỉ được nâng lên đầu phạm vi được tạo cho thân hàm, không phải phạm vi cha được tạo cho danh sách tham số, vì vậy giá trị của nó không hiển thị với function multiply(a, b) { return a * b; } multiply(5, 2); // 10 multiply(5); // NaN ! 5
function fnName(param1 = defaultValue1, /* … ,*/ paramN = defaultValueN) { // … } 0
Trong lệnh gọi thứ hai trong ví dụ này, ngay cả khi đối số đầu tiên được đặt rõ ràng thành function multiply(a, b) { return a * b; } multiply(5, 2); // 10 multiply(5); // NaN ! 3 (mặc dù không phải là function multiply(a, b) { return a * b; } multiply(5, 2); // 10 multiply(5); // NaN ! 06 hoặc các giá trị giả khác), giá trị của đối số function multiply(a, b) { return a * b; } multiply(5, 2); // 10 multiply(5); // NaN ! 07 vẫn là giá trị mặc định
function fnName(param1 = defaultValue1, /* … ,*/ paramN = defaultValueN) { // … } 4
Đối số mặc định được đánh giá tại thời điểm gọi. Không giống như Python (ví dụ), một đối tượng mới được tạo mỗi khi hàm được gọi
function fnName(param1 = defaultValue1, /* … ,*/ paramN = defaultValueN) { // … } 5
Điều này thậm chí áp dụng cho các hàm và biến
function fnName(param1 = defaultValue1, /* … ,*/ paramN = defaultValueN) { // … } 6
Các tham số được xác định trước đó (ở bên trái) có sẵn cho các tham số mặc định sau này
function multiply(a, b) { return a * b; } multiply(5, 2); // 10 multiply(5); // NaN ! 0
Chức năng này có thể được tính gần đúng như thế này, điều này cho thấy có bao nhiêu trường hợp cạnh được xử lý
function multiply(a, b) { return a * b; } multiply(5, 2); // 10 multiply(5); // NaN ! 1
Bạn có thể sử dụng phép gán giá trị mặc định với cú pháp gán phá hủy
Một cách phổ biến để làm điều đó là đặt một đối tượng/mảng trống làm giá trị mặc định cho tham số bị hủy cấu trúc; . function multiply(a, b) { return a * b; } multiply(5, 2); // 10 multiply(5); // NaN ! 08. Điều này giúp có thể không chuyển gì cho hàm mà vẫn có các giá trị đó được điền sẵn