Arguments của 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ởi vì 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 ...
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ởi vì 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ụ 01: 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:
- Gọi hàm đó với 1 tham số.
- Gọi hàm đó với 2 tham số và tham số thứ 2 là một đối tượng.
Lưu ý ở đâ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 ); } });
Chúng ta sẽ tìm hiểu ở ví dụ tiếp theo để làm rõ ràng hơn điều này, 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 />'); }