JavaScript function
không thực hiện bất kỳ kiểm tra nào trên các giá trị tham số [đối số].
Tham số và đối số chức năng
Trước đó trong hướng dẫn này, bạn đã học được rằng các chức năng có thể có các tham số: parameters:
hàm functionName [tham số1, tham số2, tham số3] {& nbsp; // Mã được thực thi}
// code to be executed
}
Các tham số chức năng là các tên được liệt kê trong định nghĩa chức năng.parameters are the names listed in the function definition.
Đối số chức năng là các giá trị thực được truyền đến [và nhận được bởi] hàm.arguments are the real values passed to [and received by] the function.
Quy tắc tham số
Định nghĩa chức năng JavaScript không chỉ định các loại dữ liệu cho các tham số.
Các hàm JavaScript không thực hiện kiểm tra loại trên các đối số được truyền.
Các hàm JavaScript không kiểm tra số lượng đối số nhận được.
Tham số mặc định
Nếu một hàm được gọi với các đối số bị thiếu [ít hơn được khai báo], các giá trị bị thiếu được đặt thành undefined
.missing arguments
[less than declared], the missing values are set to undefined
.
Đôi khi điều này được chấp nhận, nhưng đôi khi tốt hơn là gán giá trị mặc định cho tham số:
Thí dụ
hàm myfunction [x, y] {& nbsp; if [y === không xác định] {& nbsp; & nbsp; & nbsp; y = 2; & nbsp; }}
if [y === undefined] {
y = 2;
}
}
Hãy tự mình thử »
Giá trị tham số mặc định
ES6 cho phép các tham số chức năng có các giá trị mặc định.
Thí dụ
hàm myfunction [x, y] {& nbsp; if [y === không xác định] {& nbsp; & nbsp; & nbsp; y = 2; & nbsp; }}
Hãy tự mình thử »
return x + y;
}
myFunction[5];
Hãy tự mình thử »
Giá trị tham số mặc định
ES6 cho phép các tham số chức năng có các giá trị mặc định.
Thí dụ
hàm myfunction [x, y] {& nbsp; if [y === không xác định] {& nbsp; & nbsp; & nbsp; y = 2; & nbsp; }}
let sum = 0;
for [let arg of args] sum += arg;
return sum;
}
Hãy tự mình thử »
Hãy tự mình thử »
Giá trị tham số mặc định
ES6 cho phép các tham số chức năng có các giá trị mặc định.
Nếu y không được thông qua hoặc không xác định, thì y = 10.
hàm myfunction [x, y = 10] {& nbsp; trả về x + y;} myfunction [5];
Thí dụ
hàm myfunction [x, y] {& nbsp; if [y === không xác định] {& nbsp; & nbsp; & nbsp; y = 2; & nbsp; }}
Hãy tự mình thử »
let max = -Infinity;
for [let i = 0; i < arguments.length; i++] {
if [arguments[i] > max] {
max
= arguments[i];
}
}
return max;
}
Hãy tự mình thử »
Giá trị tham số mặc định
Thí dụ
hàm myfunction [x, y] {& nbsp; if [y === không xác định] {& nbsp; & nbsp; & nbsp; y = 2; & nbsp; }}
Hãy tự mình thử »
let sum = 0;
for [let i = 0; i < arguments.length; i++] {
sum +=
arguments[i];
}
return sum;
}
Hãy tự mình thử »
Giá trị tham số mặc địnhtoo many arguments [more than declared], these arguments can be reached using the arguments object.
ES6 cho phép các tham số chức năng có các giá trị mặc định.
Nếu y không được thông qua hoặc không xác định, thì y = 10.
hàm myfunction [x, y = 10] {& nbsp; trả về x + y;} myfunction [5];value: The function only gets to know the values, not the argument's locations.
Tham số phần còn lại chức năng
Tham số REST [...] cho phép một hàm xử lý số lượng đối số không xác định như một mảng:
hàm tổng [... args] {& nbsp; Đặt tổng = 0; & nbsp; for [Đặt arg của args] sum += arg; & nbsp; trả về tổng; }
Đặt x = sum [4, 9, 16, 25, 29, 100, 66, 77];
Đối tượng đối sốreference:
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ủa các đối số được sử dụng khi hàm được gọi [được gọi].
Cá nhân tôi không thích chức năng "Pass By tham khảo" được cung cấp bởi các ngôn ngữ lập trình khác nhau. Có lẽ đó là bởi vì tôi chỉ khám phá ra các khái niệm về lập trình chức năng, nhưng tôi luôn bị nổi da gà khi thấy các chức năng gây ra tác dụng phụ [như thao tác các tham số được truyền qua tham chiếu]. Cá nhân tôi nắm bắt mạnh mẽ nguyên tắc "trách nhiệm duy nhất".
IMHO, một hàm sẽ trả về chỉ một kết quả/giá trị bằng cách sử dụng từ khóa trả về. Thay vì sửa đổi một tham số/đối số, tôi sẽ trả về giá trị tham số/đối số đã sửa đổi và để lại bất kỳ công việc phân công mong muốn nào lên đến mã gọi.
Nhưng đôi khi [hy vọng rất hiếm khi], cần phải trả về hai hoặc nhiều giá trị kết quả từ cùng một hàm. Trong trường hợp đó, tôi sẽ chọn bao gồm tất cả các giá trị kết quả đó trong một cấu trúc hoặc đối tượng. Một lần nữa, việc xử lý bất kỳ công việc chỉ định lại nên tùy thuộc vào mã gọi.
Example:
Giả sử các tham số truyền sẽ được hỗ trợ bằng cách sử dụng từ khóa đặc biệt như 'ref' trong danh sách đối số. Mã của tôi có thể trông giống như thế này:
//The Function
function doSomething[ref value] {
value = "Bar";
}
//The Calling Code
var value = "Foo";
doSomething[value];
console.log[value]; //Bar
Thay vào đó, tôi thực sự muốn làm một cái gì đó như thế này:
//The Function
function doSomething[value] {
value = "Bar";
return value;
}
//The Calling Code:
var value = "Foo";
value = doSomething[value]; //Reassignment
console.log[value]; //Bar
Khi tôi cần viết một hàm trả về nhiều giá trị, tôi cũng sẽ không sử dụng các tham số được truyền bằng tham chiếu. Vì vậy, tôi sẽ tránh mã như thế này:
//The Function
function doSomething[ref value] {
value = "Bar";
//Do other work
var otherValue = "Something else";
return otherValue;
}
//The Calling Code
var value = "Foo";
var otherValue = doSomething[value];
console.log[value]; //Bar
console.log[otherValue]; //Something else
Thay vào đó, tôi thực sự muốn trả về cả hai giá trị mới bên trong một đối tượng, như thế này:
//The Function
function doSomething[value] {
value = "Bar";
//Do more work
var otherValue = "Something else";
return {
value: value,
otherValue: otherValue
};
}
//The Calling Code:
var value = "Foo";
var result = doSomething[value];
value = result.value; //Reassignment
console.log[value]; //Bar
console.log[result.otherValue];
Những ví dụ mã này khá đơn giản, nhưng nó chứng minh cách cá nhân tôi sẽ xử lý những thứ như vậy. Nó giúp tôi giữ các trách nhiệm khác nhau ở đúng nơi.
Mã hóa hạnh phúc. :]