Nếu một hàm được gọi với các đối số bị thiếu [ít hơn so với khai báo], các giá trị bị thiếu được đặt thành undefined
Đôi khi điều này có thể chấp nhận được, nhưng đôi khi tốt hơn là gán giá trị mặc định cho tham số
Giá trị tham số mặc định
ES6 cho phép các tham số chức năng có giá trị mặc định
Thí dụ
Nếu y không được thông qua hoặc không xác định, thì y = 10
function myFunction[x, y = 10] {
return x + y;
}
myFunction[
Thông số phần còn lại chức năng
Tham số còn lại [. ] cho phép một hàm coi số lượng đối số không xác định là một mảng
Thí dụ
hàm tính tổng[. args] {
let sum = 0;
for [let args of args] sum += arg;
return sum;
}
đặt x = tổng[4, 9, 16, 25, 29, 100, 66, 77];
Tự mình thử »Đối tượng đối số
Các hàm JavaScript có một đối tượng tích hợp được gọi là đối tượng đối số
Đối tượng đối số chứa một mảng các đối số được sử dụng khi hàm được gọi [gọi]
Bằng cách này, bạn có thể chỉ cần sử dụng một hàm để tìm [ví dụ] giá trị cao nhất trong danh sách các số
Thí dụ
x = findMax[1, 123, 500, 115, 44, 88];
function findMax[] {
let max = -Infinity;
for [let i = 0; i < đối số. chiều dài;
if [arguments[i] > max] {
max = arguments[i];
}
}
return max;
}
Hoặc tạo một hàm để tính tổng tất cả các giá trị đầu vào
Thí dụ
x = sumAll[1, 123, 500, 115, 44, 88];
function sumAll[] {
let sum = 0;
for [let i = 0; i < đối số. chiều dài;
sum += arguments[i];
}
return sum;
}
Nếu một hàm được gọi với quá nhiều đối số [nhiều hơn so với khai báo], những đối số này có thể được truy cập bằng cách sử dụng đối tượng đối số
Các đối số được truyền theo giá trị
Tham số, trong lời gọi hàm, là đối số của hàm
Đối số JavaScript được truyền theo giá trị. Hàm chỉ biết các giá trị, không biết vị trí của đối số
Trong JavaScript, chúng ta có các hàm và chúng ta có các đối số mà chúng ta chuyển vào các hàm đó. Nhưng cách JavaScript xử lý những gì bạn truyền vào không phải lúc nào cũng rõ ràng. Không có "chuyển qua tham chiếu" cho bất kỳ biến nào trong JavaScript. Tất cả các biến và đối số được gán theo giá trị, nhưng đối với các đối tượng, giá trị của biến là một tham chiếu. Do đó, khi bạn truyền một đối tượng và thay đổi các thành viên của nó, những thay đổi đó vẫn tồn tại bên ngoài hàm. Điều này làm cho nó trông giống như vượt qua tham chiếu. Vì vậy, các giá trị Nguyên thủy như số, chuỗi, boolean được truyền theo giá trị trong khi Đối tượng và mảng được truyền theo tham chiếu như đã nói ở trên
Với các kiểu dữ liệu nguyên thủy
Trong trường hợp Kiểu dữ liệu nguyên thủy, nếu bạn thay đổi giá trị của Kiểu dữ liệu nguyên thủy bên trong một hàm, thay đổi này sẽ không ảnh hưởng đến biến ở phạm vi bên ngoài. Điều này có nghĩa là bất kỳ thay đổi nào đối với biến đó khi ở trong hàm đều hoàn toàn tách biệt với mọi thứ xảy ra bên ngoài hàm. Hãy cùng xem ví dụ sau
Trong ví dụ trên, chúng ta đang thay đổi biến "toDay" bên trong hàm changeDay, và hiển thị nó sau khi gọi hàm, nó vẫn có giá trị là "Sunday". Điều này là do khi các kiểu nguyên thủy được truyền theo giá trị. Điều này có nghĩa là bất kỳ thay đổi nào đối với biến đó khi ở trong hàm đều hoàn toàn tách biệt với mọi thứ xảy ra bên ngoài hàm. Đây là ý nghĩa khi chúng ta nói rằng chúng ta đang chuyển giá trị trong JavaScript
với đối tượng
Trong trường hợp Đối tượng, nếu bạn thay đổi giá trị của thuộc tính Đối tượng bên trong một hàm, thay đổi này sẽ ảnh hưởng đến biến ở phạm vi bên ngoài. Tất cả các biến và đối số được truyền theo giá trị, nhưng đối với các đối tượng, giá trị của biến là một tham chiếu. Truyền theo tham chiếu liên quan đến việc có hai tham chiếu trỏ đến cùng một đối tượng trong bộ nhớ. Điều này có nghĩa là bạn có thể thay đổi và đối tượng hoặc chức năng bằng cách gán nó cho một đối tượng khác hoặc chuyển nó dưới dạng tham số cho một hàm. Hãy cùng xem ví dụ sau
Trong ví dụ trên, chúng ta đang thay đổi biến "toDay" bên trong hàm changeDay, và hiển thị nó sau khi gọi hàm, giá trị của toDay được thay đổi thành "Monday". Điều này là do khi bạn chuyển một đối tượng vào hàm, bạn sẽ không chuyển một bản sao. Bạn đang chuyển tham chiếu trỏ đến đối tượng thisWeek. Vì vậy, khi bạn thay đổi thuộc tính của đối tượng đó trong hàm, bạn đang thay đổi thuộc tính của đối tượng trong phạm vi bên ngoài
Hiểu sự khác biệt giữa truyền theo giá trị và truyền theo tham chiếu là chìa khóa để hiểu cách thức hoạt động của các đối tượng và nguyên hàm JavaScript
Bạn có nhớ bộ dụng cụ sơ cứu trong chương 3 không? . Việc đóng gói hoặc chia khối như vậy, trong đó chúng ta coi một bộ sưu tập là số ít, là một phần quan trọng trong cách con người chúng ta đối phó với thông tin phức tạp, cả bằng ngôn ngữ và trí nhớ. Khi có nhu cầu, chúng ta có thể xem xét các yếu tố tạo nên bộ. thuốc sát trùng, cao dán, băng, v.v.