1. Tham số và đối số của hàm trong JavaScript

Tham số của hàm (Function Parameter) chính là tên được ta liệt kê ra trong phần định nghĩa hàm.

Ví dụ:

function tênhàm (thamsố1, thamsố2, thamsố3) {
    //code
}

Đối số của hàm (Function Arguments) là những giá trị thực được truyền vào khi gọi hàm. Hay nó chính là những giá trị mà hàm được nhận.

Chú ý

Js function không thực hiện bất kỳ kiểm tra nào đối với các giá trị tham số hay đối số.

2. Quy tắc của tham số trong JavaScript

Một hàm trong Js có thể có nhiều hơn một tham số.

Hàm trong Js không xác định kiểu dữ liệu của tham số mà nó có thể là bất kỳ kiểu dữ liệu nào.

Hàm trong Js không thực hiện kiểm tra kiểu của các đối số truyền vào.

Hàm trong Js không kiểm tra số lượng đối số nhận được.

Ta có thể truyền ít hơn số đối số khi gọi một hàm. Khi đó:

  • Ít đối số hơn thì các tham số còn lại là undefined
  • Nhiều đối số hơn thì các đối số bổ sung sẽ bị bỏ qua

3. Tham số mặc định trong JavaScript – Default Parameter

Nếu một hàm được gọi mà không có đối số (ít hơn phần đã khai báo) thì những giá trị bỏ trống đó được đặt là undefined . Nhưng đôi khi điều này có thể chấp nhận được nhưng có lúc sẽ tốt hơn nếu ta gán cho tham số đó một giá trị mặc định cho tham số.

Ví dụ

<script>
function myFunction(x, y) {
  if (y === undefined) {
    y = 2;
  }  
  return x * y;
}
document.write( myFunction(4));
</script>

Nếu một hàm được gọi với quá nhiều đối số (nhiều hơn phần khai báo) thì ta có thể lấy những đối số đó bằng cách sử dụng đối tượng arguments .

4. Đối tượng Arguments trong JavaScript

Mặc định Js cho ta một đối tượng cục bộ có sẵn là arguments object . Nó thực chất là một mảng giống như object mà thôi. Bạn có thể truy cập các giá trị của nó bằng cách sử dụng chỉ mục tương tự như mảng . Chỉ có điều là nó không hỗ trợ các phương thức mảng mà thôi.

Ví dụ:

<script>
function findMax() {
  let max = -Infinity;
  for(let i = 0; i < arguments.length; i++) {
    if (arguments[i] > max) {
      max = arguments[i];
    }
  }
  return max;
} 
document.write(findMax(4, 5, 6));
</script>

Hay ví dụ tạo một hàm để tính tổng giá trị đầu vào:

<script>
function sumAll() {
  let sum = 0;
  for(let i = 0; i < arguments.length; i++) {
    sum += arguments[i];
  }
  return sum;
}
document.write(sumAll(1, 123, 500, 115, 44, 88));
</script>

Nếu một hàm được gọi với quá nhiều đối số (nhiều hơn phần khai báo) thì ta có thể lấy những đối số đó bằng cách sử dụng đối tượng arguments .

5. Truyền giá trị cho đối số theo kiểu tham chiếu

Khi một đối số được truyền vào hàm theo kiểu tham trị thì lúc này hàm chỉ quan tâm giá trị của nó chứ không cần biết địa chỉ hay nơi lưu trữ. Giá trị đó sẽ được copy vào biến cục bộ (mới) của hàm. Do đó, dù cho bên trong hàm làm thay đổi giá trị của đối số thì giá trị ban đầu của tham số cũng không bị thay đổi. Tức là giá trị của đối số trước và sau khi ra khỏi hàm là giống nhau, không bị thay đổi.

Ví dụ:

function tangGiaTri(num) {
    num += 10;
    return num;
}    
var num = 10
tangGiaTri(num)   // Giá trị biến num không đổi sau gọi hàm

6. Đối tượng được truyền bằng tham chiếu

Trong Js, khi truyền một đối tượng vào hàm, đối tượng đó sẽ được xem như chúng được truyền bằng tham chiếu (pass by reference). Nếu hàm thay đổi một thuộc tính của đối tượng, thì thuộc tính đó sẽ thay đổi giá trị ban đầu.Tức là việc thay đổi của thuộc tính đối tượng bên trong hàm sẽ được phản ánh bên ngoài hàm.

function capNhat(obj)
{
    obj.value = 20;
}
var obj = {value: 10}; //Khởi tạo value = 10
changeValue(obj)       //Giá trị của value đã thay đổi sau gọi hàm