Types of Function
Một hàm trong JS có thể có nhiều cách khai báo:
- Declaration function
- Expression function
- Anonymous function
- Arrow function
Important
JavaScript không hỗ trợ function overloading một cách tường minh.
Declaration Function
Đây là cách khai báo đơn giản, tương tự C++.
- Hành động lấy giá trị của hàm gọi là call hoặc invoke.
- Trả về giá trị trong hàm của JavaScript cũng dùng từ khóa
returnnhư C/C++. - Nếu hàm không trả về giá trị gì thì giá trị của nó là
undefined.
Ví dụ:
function square(n) {
return n * n
}
let squareOfEleven = square(11)
console.log(squareOfEleven) // 121Summary
Điểm mạnh:
- Có global scope.
- Có thể gọi thực thi hàm trước khai báo hàm (do có Hoisting).
Expression Function
Expression function (hàm biểu thức) là hàm mà được gán cho một biến như một biểu thức.
const factorial = function calcFactorial(n) {
return n < 2 ? 1 : n * calcFactorial(n - 1)
}
console.log(factorial(3)) // 6Ta có:
- Biến
factorialmang giá trị là một hàm, có thể dùng toán tử gọi hàm(). - Tên hàm
calcFactorialđược dùng để gọi đệ quy bên trong hàm, có thể bỏ đi nếu không dùng đệ quy.
Summary
Anonymous Function
Anonymous function (hàm vô danh) có bản chất là expression function nhưng không có tên.
const square = function (n) {
return n * n
}
console.log(square(11)) // 121Important
Chỉ expression function mới được phép không có tên (declaration thì bắt buộc phải có).
Function with Default Parameters
Đôi khi ta muốn hàm có một tham số mặc định nào đó. Nếu chúng ta không truyền vào đối số thì hàm sẽ lấy giá trị đó để xử lý.
Hàm với tham số mặc định có thể khai báo dưới dạng declaration function hoặc arrow function.
Với declaration function:
function moodOfDay(mood = "happy") {
let str = `Today's mood is ${mood}`
return str
}
console.log(moodOfDay()) // Today's mood is happy
console.log(moodOfDay("sad")) // Today's mood is sadVới arrow function:
const moodOfDay = (mood = "happy") => {
let str = `Today's mood is ${mood}`
return str
}
console.log(moodOfDay()) // Today's mood is happy
console.log(moodOfDay("sad")) // Today's mood is sadUnlimited Number of Parameters
Hàm có thể không có số lượng tham số cố định. Để xây dựng những hàm này, ta có hai cách là sử dụng declaration function hoặc arrow function.
Info
Tất cả các đối số truyền vào declaration function đều sẽ được truy cập thông qua đối tượng
argumentsở bên trong hàm.
Ví dụ với declaration function:
function sumAllNums() {
let sum = 0
for (const argument of arguments) {
sum += argument
}
return sum
}
console.log(sumAllNums(1, 2, 3, 4)) // 10
console.log(sumAllNums(10, 20, 13, 40, 10)) // 93
console.log(sumAllNums(15, 20, 30, 25, 10, 33, 40)) // 173Đối với arrow function thì ta cần dùng rest operator để gom các đối số lại thành một mảng các giá trị:
const sumAllNums = (...args) => {
return args.reduce((acc, curr) => acc + curr, 0)
}
console.log(sumAllNums(1, 2, 3, 4)) // 10
console.log(sumAllNums(10, 20, 13, 40, 10)) // 93