PHẦN CƠ BẢN
VÒNG LẶP
DATA TYPES
EVENTS
DOM
BOM
OBJECT
BỔ SUNG
THỰC HÀNH
JAVASCRIPT CĂN BẢN
CÁC CHỦ ĐỀ
BÀI MỚI NHẤT
MỚI CẬP NHẬT

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.

test php

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ố đó.

test php

banquyen png
Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.

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ố 3

Trong 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ùng chuyên mục:

Functional Programming là gì? Tại sao và khi nào bạn nên sử dụng trong JavaScript

Functional Programming là gì? Tại sao và khi nào bạn nên sử dụng trong JavaScript

Những tính năng mới trong ES6+ trong JavaScript

Những tính năng mới trong ES6+ trong JavaScript

4 cách tránh memory leaks trong JavaScript

4 cách tránh memory leaks trong JavaScript

Capturing và bubbling Event trong Javascript

Capturing và bubbling Event trong Javascript

Phân biệt prototype và __proto__ trong JavaScript

Phân biệt prototype và __proto__ trong JavaScript

Cách hoạt động của Event Loop trong JavaScript

Cách hoạt động của Event Loop trong JavaScript

Phương thức bind(), call(), và apply() trong JavaScript

Phương thức bind(), call(), và apply() trong JavaScript

Cách khắc phục lỗi

Cách khắc phục lỗi "hoisting" trong JavaScript

Sử dụng Promise.all và Promise.race để quản lý các Promise trong JavaScript

Sử dụng Promise.all và Promise.race để quản lý các Promise trong JavaScript

Xử lý bất đồng bộ bằng vòng lặp for-await trong JavaScript

Xử lý bất đồng bộ bằng vòng lặp for-await trong JavaScript

Sự khác biệt giữa Promise, Callback và Async/Await trong JavaScript

Sự khác biệt giữa Promise, Callback và Async/Await trong JavaScript

Cách sử dụng Async functions trong JavaScript

Cách sử dụng Async functions trong JavaScript

Hàm String isspace() trong Python

Hàm String isspace() trong Python

Cách tạo số ngẫu nhiên trong Javascript

Cách tạo số ngẫu nhiên trong Javascript

Hướng dẫn cách tạo một số ngẫu nhiên ...

Cách gộp hai object javascript lại với nhau

Cách gộp hai object javascript lại với nhau

Cách lấy chiều dài của object trong Javascript

Cách lấy chiều dài của object trong Javascript

Hướng dẫn giải phương trình bậc 1 bằng Javascript

Hướng dẫn giải phương trình bậc 1 bằng Javascript

Cách dùng nextSibling trong javascript

Cách dùng nextSibling trong javascript

Cách dùng insertAdjacentHTML trong javascript

Cách dùng insertAdjacentHTML trong javascript

Cách dùng innerHTML trong Javascript

Cách dùng innerHTML trong Javascript

Top