Cách truyền biến tham chiếu trong Javascript?
Truyền biến tham chiếu hầu như ngôn ngữ nào cũng có, vậy trong Javascript có tồn tại hay không? Nếu có thì cách sử dụng nó như thế nào? Hãy trình bày cách sử dụng tham chiếu trong Javascript.
Bài giải
-------------------- ######## --------------------
Trong Javascript cho phép bạn truyền bao nhiêu tham số vào hàm đều được miễn là hàm đó có khai báo tham số, các tham số này được xử lý trong hàm và mang tính cục bộ, nghĩa là các thao tác bên trong hàm không làm ảnh hưởng đến giá trị các tham số đó.

1. Một số cách truyền tham số trong hàm
Tham số có thể hiểu là một nặc danh đại diện cho giá trị truyền vào hàm, vì vậy ta có thể truyền bất kì một kiểu dữ liệu nào cho tham số như kiểu number, string, object, hay thậm chí là một callback function. Ok vậy thì trong phần này mình sẽ lấy một số ví dụ cho từng kiểu dữ liệu nhé.
Khi tham số là kiểu dữ liệu thông thường
Kiểu dữ liệu thông thường là kiểu dữ liệu number, string, ... Mình sẽ làm một ví dụ đơn giản như sau: tạo một hàm với nội dung thay đổi giá trị của tham số, sau đó sử dụng để kiểm tra xem giá trị của tham số đó ở bên ngoài hàm có bị ảnh hưởng theo không.
function changeValue(x)
{
// đổi giá trị của x
x = 5;
}
var x = 4;
alert(x); // kết quả là 4
myfunction(x); // chạy hàm này xem x có bị thay đổi không
alert(x); // kết quả x vẫn không thay đổi (vẫn bằng 4)Rõ ràng giá trị của x ở bên ngoài hàm vẫn không thay đổi, đây chính là đặc điểm của tham số truyền vào hàm.
Bài viết này được đăng tại [free tuts .net]
Khi tham số là một Object
Trong ví dụ trên tham số truyền vào có kiểu dữ liệu number nên rất đơn giản, bây giờ ta thử truyền tham số là một object xem kết quả thế nào nhé. Xét ví dụ dưới đây:
function changeValue(obj)
{
obj.value = 20;
}
var obj = {};
console.log(obj); // obj có giá trị rỗng {}
changeValue(obj);
console.log(obj); // obj có giá trji là {value:20}Trong ví dụ này sau khi thực hiện gọi hàm changeValue thì đối tượng obj đã được bổ sung một key value, tức là nó đã thay đổi giá trị. Vậy ta có kết luận là nếu tham số truyền vào là một object thì các thao tác thay đổi giá trị của object bên trong hàm sẽ được lưu lại.
Khi tham số là function
Nếu bạn truyền vào là một function thì sau khi thực hiện function đó vẫn không thay đổi.
Xét ví dụ sau: XEM DEMO
// Hàm chính
function freetutsDotNet()
{
this.age = 3;
this.add = function(){
this.age++;
};
}
// Tạo mới đối tượng domain
var domain = new freetutsDotNet();
// Hàm thực hiện callback function
function domainChanger(fnc){
fnc();
}
//// SỬ DỤNG ////
alert(domain.age); // kết quả là 3
domainChanger(domain.add); // gọi hàm domain.add với mục đích tăng age lên 4
alert(domain.age); // nhưng kết quả vẫn là số 3Trong ví dụ này mình đã truyền tham số là một callback function và callback function đó có tác dụng tăng age lên 1, tuy nhiên sau khi thực hiện xong thì age vẫn giữ nguyên giá trị là 3.
2. Kết luận
Như vậy trong Javascript không tồn tại khái niệm truyền tham chiếu, vì vậy bạn chỉ có thể sử dụng biến cục bộ hoặc là object thì các hành động bên trong hàm mới làm thay đổi giá trị của biến.
Câu hỏi thường gặp liên quan:
- Cách truyền biến tham chiếu trong Javascript?
- Cho ví dụ về hàm có return và không có return trong Javascript

Các hàm xử lý chuỗi trong Javascript (cắt / tách / nối chuỗi ..)
Chia lấy phần dư / chia lấy phần nguyên trong javascript
Các cách khai báo biến trong Javascript
Các sự kiện (Event) trong Javascript
Hướng tạo thanh search bar bằng CSS
Hàm array.slice() trong Javascript
Tính tổng hai số bằng Javascript (cộng hai số)
Cách khai báo biến trong PHP, các loại biến thường gặp
Download và cài đặt Vertrigo Server
Thẻ li trong HTML
Thẻ article trong HTML5
Cấu trúc HTML5: Cách tạo template HTML5 đầu tiên
Cách dùng thẻ img trong HTML và các thuộc tính của img
Thẻ a trong HTML và các thuộc tính của thẻ a thường dùng