Làm cách nào để chuyển đối số bằng tham chiếu trong JavaScript?

Trong bài đăng này, chúng ta sẽ xem xét sự khác biệt giữa truyền giá trị và truyền tham chiếu trong JavaScript

0. Quan điểm cá nhân về chủ đề

Các khái niệm này đã được định nghĩa từ lâu trước khi JavaScript được tạo và do đó không thể hiện đầy đủ ngữ nghĩa của JavaScript. Tuy nhiên, nếu bạn vẫn muốn áp dụng chúng vào JavaScript, tôi sẽ cố gắng giải thích các khái niệm này dưới dạng JavaScript

1. Một số định nghĩa

Biến đổi. Một biểu tượng có nhiều ý nghĩa đề cập đến một giá trị tại một vị trí cụ thể trong bộ nhớ. Trong hầu hết các trường hợp, cụm từ này quá nặng để được sử dụng một mình khi đề cập đến các chi tiết cụ thể.

Giá trị. Các bit cụ thể được lưu trữ trong bộ nhớ được gọi bằng ký hiệu của biến

Vị trí bộ nhớ. Vị trí trong bộ nhớ mà giá trị của một biến được lưu giữ

Callee và người gọi. Callee là một chức năng đã được gọi bởi một chức năng khác, trong khi một người gọi là một chức năng gọi một chức năng khác [callee]

Tham số chính thức. Tham số hình thức là các giá trị được đặt trước mà hàm nhận được khi được gọi

thông số thực tế. Tham số thực tế là các giá trị được cung cấp trong lệnh gọi hàm

Một số lưu ý

Biến là con trỏ của giá trị

Việc gán lại một biến chỉ đơn giản là thay đổi giá trị của tham chiếu

Bởi vì mỗi biến có một con trỏ riêng, việc gán lại một biến không ảnh hưởng đến các biến khác đang trỏ đến cùng một đối tượng

2. Pass by Value là gì?

Thuật ngữ “chuyển theo giá trị” đề cập đến việc tạo một bản sao bộ nhớ của giá trị của tham số thực. Ví dụ: caller và callee có hai biến độc lập có cùng giá trị. Hệ quả của việc callee thay đổi giá trị tham số không hiển nhiên đối với người gọi. Đừng lo lắng nếu bạn không hiểu theo định nghĩa, tôi sẽ giải thích nó bằng một đoạn mã ví dụ một chút

3. Pass by Reference là gì?

Thuật ngữ “pass-by-reference” đề cập đến việc chuyển tham chiếu của một đối số trong hàm gọi đến tham số chính thức tương ứng của hàm được gọi. Sử dụng tham chiếu đã cho, hàm được gọi có thể thay đổi giá trị của đối số. Một lần nữa, đừng lo lắng nếu bạn không hiểu theo định nghĩa, tôi sẽ đưa ra các ví dụ mã sau một chút trong bài viết này

4. JavaScript là Pass by Value hay Pass by Reference?

Chúng tôi có các hàm trong JavaScript và các đối số mà chúng tôi đưa vào các hàm đó. Tuy nhiên, cách JavaScript xử lý dữ liệu bạn cung cấp không phải lúc nào cũng rõ ràng. Trong JavaScript, không có thứ gọi là "chuyển qua tham chiếu" cho bất kỳ biến nào. Tất cả các biến và đối số đều có giá trị được gán cho chúng, tuy nhiên giá trị của biến đối tượng là một tham chiếu. Kết quả là, nếu bạn cung cấp một đối tượng và thay đổi các thành viên của nó bên trong phương thức, thì những thay đổi đó sẽ nằm ngoài hàm. Điều này làm cho nó xuất hiện như thể nó là một hệ thống tham chiếu. Các giá trị nguyên thủy như số nguyên, chuỗi và boolean được cung cấp theo giá trị, nhưng các đối tượng và mảng, như đã nêu trước đó, được truyền theo tham chiếu

5. Ví dụ JavaScript Pass by Value

Giả sử bạn có 2 biến số nguyên [kiểu dữ liệu nguyên thủy] được xác định

var num1 = 1;
var num2 = 2;

Sau đó, giả sử bạn xác định số nguyên thứ 3, num3 và gán num1 cho nó. Sau đó làm một giao diện điều khiển. nhật ký của cả num3 và num1. Sau khi bạn làm điều tương tự bằng cách gán num2 cho num3

var num3 = num1;
console.log[num1]; //outputs 1
console.log[num3]; //also outputs 1
num3 = num2;
console.log[num1]; //outputs 2
console.log[num2]; //also 2

Vì vậy, trong ví dụ mã này, không có gì thay đổi trên num1 và num2 vì chúng ta chỉ gán chúng cho một biến khác, num3, nói cách khác, chúng ta đã chuyển giá trị của chúng cho num3 và num3 hiện có giá trị con trỏ mới trong bộ nhớ và nó không có gì để làm . Hãy đi sâu vào nhiều hơn. Bây giờ, chúng ta sẽ gán lại num1 cho num3 và thay đổi giá trị của num3 và console. đăng nhập lại

num3 = num1;
num3 = 3;
console.log[num1]; //outputs 1
console.log[num3]; //outputs 3

Vì vậy, ở đây chúng ta thấy cả hai giá trị num1 và num3 đều khác nhau trong khi trước đó chúng ta chỉ gán num3 cho num1. Điều này cho thấy rằng cả hai biến đều trỏ đến các giá trị khác nhau trong bộ nhớ, do đó việc thay đổi giá trị ở một trong số chúng không ảnh hưởng gì đến biến khác

6. Ví dụ JavaScript Pass by Reference

Giả sử bạn có 2 đối tượng được xác định

var obj1 = {name: "Vəndam"};
var obj2 = {name: "Tofiy"};

Sau đó, giả sử bạn xác định đối tượng thứ 3, obj3 và gán obj1 cho nó. Sau đó làm một giao diện điều khiển. nhật ký của cả obj3 và obj1. Sau khi bạn làm điều tương tự bằng cách gán obj2 cho obj3

var obj3 = obj1;
console.log[obj1]; //outputs {name: "Vəndam"}
console.log[obj3]; //also outputs {name: "Vəndam"}
obj3 = obj2;
console.log[obj2]; //outputs {name: "Tofiy"}
console.log[obj3]; //also outputs {name: "Tofiy"}

Vì vậy, trong ví dụ mã này, không có gì thay đổi trên obj1 và obj2 vì chúng ta chỉ gán chúng cho một biến khác, obj3, nói cách khác, chúng ta đã chuyển tham chiếu của chúng vào bộ nhớ cho obj3. Hãy đi sâu vào nhiều hơn. Bây giờ, chúng ta sẽ gán lại obj1 cho obj3 và thay đổi tham số đối tượng của obj3 và console. đăng nhập lại

obj3 = obj1;
obj3.name = "Mürşüd";
console.log[obj1]; //outputs {name: "Mürşüd"}
console.log[obj3]; //also outputs {name: "Mürşüd"}

Vì vậy, ở đây chúng ta thấy cả giá trị tham số đối tượng obj1 và obj3 đều được thay đổi trong khi chúng ta chỉ thay đổi obj3. giá trị tên. Điều này cho thấy rằng cả hai đối tượng đang trỏ đến cùng một tham chiếu trong bộ nhớ, do đó việc thay đổi tham số ở một trong số chúng sẽ phản ánh ở một đối tượng khác

7. Phần kết luận

Tóm lại, trong JavaScript, tất cả các biến và đối số đều có giá trị được gán cho chúng, nghĩa là chúng được truyền theo giá trị [Kiểu dữ liệu nguyên thủy] tuy nhiên giá trị của biến của đối tượng là một tham chiếu, do đó các loại phức hợp trong JavaScript được truyền theo tham chiếu

Làm cách nào để chuyển giá trị theo tham chiếu trong JavaScript?

Chuyển theo tham chiếu. Trong Truyền theo tham chiếu, Hàm được gọi bằng cách truyền trực tiếp tham chiếu/địa chỉ của biến dưới dạng đối số . Vì vậy, thay đổi giá trị bên trong chức năng cũng thay đổi giá trị ban đầu. Trong mảng JavaScript và Đối tượng theo sau chuyển qua thuộc tính tham chiếu.

Làm cách nào để chuyển mảng theo tham chiếu trong JavaScript?

Mảng và Đối tượng được truyền theo tham chiếu hoặc theo giá trị dựa trên các điều kiện này. .
nếu bạn đang đặt giá trị của một đối tượng hoặc mảng thì đó là Truyền theo giá trị. đối tượng1 = { chỗ dựa. "xe ô tô" };
nếu bạn đang thay đổi giá trị thuộc tính của một đối tượng hoặc mảng thì đó là Truyền theo tham chiếu. đối tượng1

Các đối số được truyền theo giá trị hoặc theo tham chiếu như thế nào?

Khi bạn chuyển một đối số bằng tham chiếu, bạn chuyển một con trỏ tới giá trị trong bộ nhớ . Hàm hoạt động trên đối số. Khi một hàm thay đổi giá trị của một đối số được truyền bởi tham chiếu, giá trị ban đầu sẽ thay đổi. Khi bạn chuyển một đối số theo giá trị, bạn chuyển một bản sao của giá trị đó vào bộ nhớ.

JavaScript có chuyển chuỗi theo tham chiếu không?

Trên thực tế, Chuỗi trong Javascript thực sự được truyền “theo tham chiếu” . Do đó, việc gọi một hàm bằng một chuỗi không liên quan đến việc sao chép nội dung của chuỗi. Tuy nhiên, Chuỗi JavaScript là bất biến; .

Chủ Đề