Javascript có chuyển qua tham chiếu hoặc mảng giá trị không?

Bất kể bạn làm việc với ngôn ngữ lập trình nào, chắc chắn bạn sẽ thấy mình đặt câu hỏi sau. Hỗ trợ ngôn ngữ này có vượt qua tham chiếu không? . Đó là điều không phải lúc nào cũng được giải thích rõ ràng trên mạng. Những người mới bắt đầu thường bối rối và hiểu sai mô hình tinh thần về cách bộ nhớ hoạt động và cách ngôn ngữ lập trình thao tác dữ liệu

Cụ thể, bạn có thể đã xem qua lời giải thích này trước đây

Nguyên thủy được truyền theo giá trị;

Điều này chắc chắn nghe có vẻ đơn giản đủ để trở thành sự thật. Ngoại trừ nó không phải. JavaScript, giống như hầu hết các ngôn ngữ lập trình, sử dụng nghiêm ngặt truyền theo giá trị và không hỗ trợ truyền theo tham chiếu, mặc dù nó có cái mà chúng ta gọi là “tham chiếu” [tham chiếu đối tượng]

Để làm cho vấn đề trở nên khó hiểu hơn, có rất nhiều thông tin sai lệch về chủ đề này. Đó là điều mà những người mới bắt đầu gặp khó khăn không chỉ với JavaScript mà còn với các ngôn ngữ khác. Đây là những gì bài báo Phương tiện được liên kết ở trên nói về việc chuyển qua tham chiếu

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 chuyển qua tham chiếu

Ngay cả câu trả lời được xếp hạng cao nhất trên StackOverflow cho Is JavaScript a pass-by-reference or pass-by-value language?—với số phiếu tán thành gần gấp ba lần so với câu trả lời đúng—cũng bỏ lỡ dấu ấn, cho rằng JavaScript là một trường hợp đặc biệt khi nó thực sự

Đây là sự thật. Chỉ một số ngôn ngữ lập trình thực sự hỗ trợ truyền đối số bằng cách tham chiếu. Hai ngôn ngữ như vậy là C++ và PHP. Các ngôn ngữ khác—như C, Java, JavaScript, Python và Go, kể tên một số ngôn ngữ mà tôi nghĩ đến—truyền đối số theo giá trị

Vậy tại sao nhiều người hiểu sai điều này? . Nếu bạn muốn câu trả lời ngắn gọn, vui lòng chuyển đến phần có tiêu đề Truyền con trỏ [“Tham khảo”] theo giá trị

Bỏ qua mục lục

Mục lục

  1. thuật ngữ tiên quyết. Đối số vs. Thông số
  2. JavaScript không vượt qua tham chiếu
  3. Tài liệu tham khảo "True" là bí danh
  4. “Tham chiếu đối tượng” là con trỏ
    1. Các đối tượng được lưu trữ trong bộ nhớ như thế nào?
  5. Vượt qua giá trị so với. Vượt qua tham chiếu
    1. Pass by Reference là gì?
    2. Vượt qua giá trị là gì?
    3. Truyền con trỏ [“Tham chiếu”] theo giá trị
  6. Gọi cho họ bất cứ điều gì bạn muốn
  7. Tóm lược. JavaScript không được thông qua theo tham chiếu
  8. Thuộc tính

thuật ngữ tiên quyết. Đối số vs. Thông số

Trước khi tiếp tục, chúng ta sẽ cần sơ lược thuật ngữ nhanh

function doSomething[arg] {
    // ...
}

const obj = { foo: 'bar' };
doSomething[obj];

Tham số hình thức [gọi tắt là tham số] là biến cục bộ được khai báo trong chữ ký của hàm. Ở trên, tham số chính thức của

#include 
#include 

int main[]
{
    // An ordinary variable
    std::string myName = "Aleksandr";

    // A reference variable that aliases myName
    std::string &myNickname = myName;

    // let's change myNickname to store a different string
    myNickname = "Alex";

    // the change is reflected in both variables!
    std::cout 

Chủ Đề