Hướng dẫn javascript pass array to function by reference - truyền mảng javascript vào chức năng bằng cách tham chiếu

Cá nhân tôi không thích chức năng "Pass By tham khảo" được cung cấp bởi các ngôn ngữ lập trình khác nhau. Có lẽ đó là bởi vì tôi chỉ khám phá ra các khái niệm về lập trình chức năng, nhưng tôi luôn bị nổi da gà khi thấy các chức năng gây ra tác dụng phụ (như thao tác các tham số được truyền qua tham chiếu). Cá nhân tôi nắm bắt mạnh mẽ nguyên tắc "trách nhiệm duy nhất".

IMHO, một hàm sẽ trả về chỉ một kết quả/giá trị bằng cách sử dụng từ khóa trả về. Thay vì sửa đổi một tham số/đối số, tôi sẽ trả về giá trị tham số/đối số đã sửa đổi và để lại bất kỳ công việc phân công mong muốn nào lên đến mã gọi.

Nhưng đôi khi (hy vọng rất hiếm khi), cần phải trả về hai hoặc nhiều giá trị kết quả từ cùng một hàm. Trong trường hợp đó, tôi sẽ chọn bao gồm tất cả các giá trị kết quả đó trong một cấu trúc hoặc đối tượng. Một lần nữa, việc xử lý bất kỳ công việc chỉ định lại nên tùy thuộc vào mã gọi.

Example:

Giả sử các tham số truyền sẽ được hỗ trợ bằng cách sử dụng từ khóa đặc biệt như 'ref' trong danh sách đối số. Mã của tôi có thể trông giống như thế này:

//The Function
function doSomething(ref value) {
    value = "Bar";
}

//The Calling Code
var value = "Foo";
doSomething(value);
console.log(value); //Bar

Thay vào đó, tôi thực sự muốn làm một cái gì đó như thế này:

//The Function
function doSomething(value) {
    value = "Bar";
    return value;
}

//The Calling Code:
var value = "Foo";
value = doSomething(value); //Reassignment
console.log(value); //Bar

Khi tôi cần viết một hàm trả về nhiều giá trị, tôi cũng sẽ không sử dụng các tham số được truyền bằng tham chiếu. Vì vậy, tôi sẽ tránh mã như thế này:

//The Function
function doSomething(ref value) {
    value = "Bar";

    //Do other work
    var otherValue = "Something else";

    return otherValue;
}

//The Calling Code
var value = "Foo";
var otherValue = doSomething(value);
console.log(value); //Bar
console.log(otherValue); //Something else

Thay vào đó, tôi thực sự muốn trả về cả hai giá trị mới bên trong một đối tượng, như thế này:

//The Function
function doSomething(value) {
    value = "Bar";

    //Do more work
    var otherValue = "Something else";

    return {
        value: value,
        otherValue: otherValue
    };
}

//The Calling Code:
var value = "Foo";
var result = doSomething(value);
value = result.value; //Reassignment
console.log(value); //Bar
console.log(result.otherValue);

Những ví dụ mã này khá đơn giản, nhưng nó chứng minh cách cá nhân tôi sẽ xử lý những thứ như vậy. Nó giúp tôi giữ các trách nhiệm khác nhau ở đúng nơi.

Mã hóa hạnh phúc. :)

Trong bài đăng này, chúng tôi sẽ xem xét vượt qua giá trị và vượt qua tham chiếu trong JavaScript.

Hãy cùng xem những gì được truyền qua giá trị và vượt qua tham chiếu trước khi xem xét bối cảnh JavaScript của nó.

Vượt qua giá trị:

Trong Pass by giá trị, hàm được gọi bằng cách truyền trực tiếp giá trị của biến làm đối số. Thay đổi đối số bên trong hàm không ảnh hưởng đến biến được truyền từ bên ngoài hàm.

JavaScript luôn vượt qua giá trị để thay đổi giá trị của biến không bao giờ thay đổi nguyên thủy cơ bản (chuỗi hoặc số). so changing the value of the variable never changes the underlying primitive (String or number).

function callByValue(varOne, varTwo) { 
console.log("Inside Call by Value Method");
varOne = 100;
varTwo = 200;
console.log("varOne =" + varOne +"varTwo =" +varTwo);
}
let varOne = 10;
let varTwo = 20;
console.log("Before Call by Value Method");
console.log("varOne =" + varOne +"varTwo =" +varTwo);
callByValue(varOne, varTwo) console.log("After Call by Value Method");
console.log("varOne =" + varOne +"varTwo =" +varTwo);

output will be :
---------------
Before Call by Value Method
varOne =10 varTwo =20
Inside Call by Value Method
varOne =100 varTwo =200
After Call by Value Method
varOne =10 varTwo =20

Tuy nhiên, khi một biến đề cập đến một đối tượng bao gồm mảng, giá trị là tham chiếu đến đối tượng.

Vượt qua tham chiếu:

Trong tham chiếu vượt qua, hàm được gọi bằng cách truyền trực tiếp tham chiếu/địa chỉ của biến làm đối số. Thay đổi đối số bên trong hàm ảnh hưởng đến biến được truyền từ bên ngoài hàm. Trong các đối tượng và mảng JavaScript theo sau vượt qua tham chiếu.

function callByReference(varObj) { 
console.log("Inside Call by Reference Method");
varObj.a = 100;
console.log(varObj);
}
let varObj = {a:1};
console.log("Before Call by Reference Method");
console.log(varObj);
callByReference(varObj) console.log("After Call by Reference Method");
console.log(varObj);
output will be :
---------------
Before Call by Reference Method
{a: 1}
Inside Call by Reference Method
{a: 100}
After Call by Reference Method
{a: 100}

Vì vậy, nếu chúng ta chuyển đối tượng hoặc mảng làm đối số cho phương thức, thì có khả năng giá trị của đối tượng có thể thay đổi.

Nếu bạn muốn tạo trang web hoặc cổng thông tin - liên hệ với chúng tôi @ https://www.bondesk.in

Bạn có thể vượt qua một mảng bằng cách tham khảo trong JavaScript không?

Trong các đối tượng và mảng JavaScript theo sau vượt qua tham chiếu. Vì vậy, nếu chúng ta chuyển đối tượng hoặc mảng làm đối số cho phương thức, thì có khả năng giá trị của đối tượng có thể thay đổi.. so if we are passing object or array as an argument to the method, then there is a possibility that value of the object can change.

JavaScript có vượt qua bằng cách tham chiếu hoặc vượt qua giá trị không?

JavaScript luôn luôn qua giá trị.Điều này có nghĩa là mọi thứ trong JavaScript là một loại giá trị và các đối số chức năng luôn được truyền bởi giá trị.Điều đó đang được nói, các loại đối tượng khó hiểu hơn một chút.Sự nhầm lẫn nằm ở thực tế là các loại đối tượng là các loại tham chiếu được truyền theo giá trị.. This means everything in JavaScript is a value type and function arguments are always passed by value. That being said, object types are a bit more confusing. The confusion lies in the fact that object types are reference types which are passed by value.

Tôi có thể đặt một mảng vào một hàm javascript không?

Toán tử lây lan cho phép một mảng có thể lặp lại, giống như một mảng, được mở rộng tại chỗ.Nếu bạn sử dụng toán tử lan truyền trong một mảng vào một cuộc gọi chức năng, hàm sẽ nhận được các giá trị riêng lẻ của mảng làm đối số.. If you use a spread operator in pass an array into a function call, the function will receive the individual values of the array as arguments.

JavaScript luôn vượt qua các tham số theo giá trị hoặc bằng tham chiếu?

Trong JavaScript, tất cả các đối số hàm luôn được truyền bởi giá trị.Nó có nghĩa là JavaScript sao chép các giá trị của các biến vào các đối số hàm.Bất kỳ thay đổi nào bạn thực hiện đối với các đối số bên trong hàm không phản ánh các biến vượt qua bên ngoài hàm.