Đối số hàm trong javaScript

Có thể nói javaScript là ngôn ngữ hướng đối tượng, hầu như mọi thứ trong javaScript đều làm việc theo hướng đối tượng như chuỗi, mảng...bên trong mọi hàm javaSctipt đều tồn tại một biến theo ngữ cảnh có tên là arguments, nó không phải là một mảng đúng nghĩa vì mảng trong javaScript cũng là một đối tượng, với arguments bạn không thể thay đổi nó hay bạn không thể dùng phương thức push() để thêm những phần tử mới, nhưng bạn lại có thể truy cập những phần tử như cách trong mảng, nó cũng có thuộc tính length như trong mảng. Hãy xem xét những vị dụ sau để rõ hơn điều này.

Ví dụ bạn sẽ tạo ra một hàm với 2 đối số sau đó bạn sẽ gọi hàm trong 2 trường hợp: một là gọi hàm đó với 1 tham số, hai là gọi hàm đó với 2 tham số và tham số thứ 2 là một đối tượng, ở đây bạn sẽ sử dụng arguments để kiểm tra xem hàm có bao nhiêu đối số:

function sendMessage( msg, obj ) {
// Nếu có 2 đối số
if ( arguments.length == 2 )
  // gọi phương thức của đối tượng là đối số thứ 2
  obj.handleMsg( msg );
else
  alert( msg );
}
// Gọi hàm với một tham số
sendMessage( "Hello, World!" );

// Gọi hàm với tham số thứ 2 là một đối tượng có phương thức handleMsg
sendMessage( "How are you?", {
   handleMsg: function( msg ) {
     alert( "This is a custom message: " + msg );
  }
});

Ví dụ thứ 2 rõ ràng hơn, chúng ta sẽ truy cập arguments và gán các phần tử của nó vào một mảng đúng nghĩa:

function makeArray() {
  var arr = [];
  // Lặp các phần tử trong arguments và đưa vào mảng arr
  for ( var i = 0; i < arguments.length; i++ ) {
    arr.push( arguments[i] );
  }
  return arr;
}
var myarr = makeArray('one','two');

// Kiểm tra mảng trả về từ hàm makeArray
for(var i=0; i<myarr.length; i++){
  document.write(myarr[i] +'<br />');
}

Tham khảo Apress.pro.javascript.techniques _ 2006 John Resig