Chuyển giá trị này cho hàm javascript
JavaScript luôn là giá trị truyền qua. Đ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ố của hàm luôn được truyền theo giá trị. Điều đó đang được nói, các loại đối tượng khó hiểu hơn một chút Show Sự nhầm lẫn nằm ở chỗ các loại đối tượng là các loại tham chiếu được truyền theo giá trị. Nghe có vẻ kỳ lạ, một tham chiếu đến một đối tượng được truyền cho một hàm theo giá trị. Sự khác biệt tinh tế ở đây nằm ở chỗ một tham chiếu đối tượng được truyền theo giá trị không giống như truyền một đối tượng theo tham chiếu Nói một cách đơn giản, các thay đổi đối với đối tượng bên trong hàm sẽ ảnh hưởng đến đối tượng ban đầu, vì cả hai đều tham chiếu đến cùng một đối tượng. Tuy nhiên, việc gán lại giá trị của biến giữ đối tượng ban đầu sẽ không ảnh hưởng đến đối tượng được tham chiếu bởi hàm. Hãy để tôi chứng minh điều này với một ví dụ Trong ví dụ này, Việc gán lại Vì vậy, để nói về những gì đang xảy ra ở đây, tôi đang tạo một biến có tên là 0, hàm này sẽ ghi lại giá trị fruit khi được gọi. Khi tôi gọi chức năng đó, tôi nhận được kết quả đầu ra 2 của 'raspberry' như mong đợiNhưng sau đó tôi chỉ định lại 5 và gọi lại cho 0. Nhưng thay vì nhận được một 2 giá trị mới của fruit , tôi nhận được giá trị cũ của fruit Tôi có thể bỏ qua bước này bằng cách gọi lại cho 0 để nhận một máy ghi nhật ký mới
Nhưng tại sao tôi không thể thay đổi giá trị của biến và lấy 0 để ghi lại giá trị mới nhất?Câu trả lời là trong JavaScript, khi bạn gọi một hàm với các đối số, các đối số mà bạn truyền vào sẽ được truyền theo giá trị chứ không phải theo tham chiếu. Hãy để tôi mô tả ngắn gọn những gì đang xảy ra ở đây
Khi 0 được gọi, hàm 0 được tạo. Đó là một chức năng hoàn toàn mới. Khi một chức năng hoàn toàn mới được tạo, nó sẽ tìm kiếm tất cả các biến mà nó có quyền truy cập và "đóng" chúng lại để tạo thành cái được gọi là "đóng cửa". Điều này có nghĩa là miễn là hàm 0 này tồn tại, nó sẽ có quyền truy cập vào các biến trong hàm cha của nó và các biến cấp độ mô-đun khácVậy những biến nào mà 0 có quyền truy cập khi nó được tạo? . Đọc lại danh sách đó, vì điều quan trọng là tại sao mã hoạt động theo cách của nó. Bạn có nhận thấy một cái gì đó? Chỉ vì hai biến được gán cùng một giá trị không có nghĩa là chúng giống nhau. Đây là một ví dụ đơn giản về khái niệm đó
Lưu ý rằng mặc dù chúng ta làm cho 2 trỏ đến giá trị của biến 3, nhưng chúng ta vẫn có thể thay đổi biến 3 và giá trị mà 2 trỏ đến là không thay đổi. Điều này là do chúng tôi đã không trỏ 2 đến 3 mỗi lần. Chúng tôi đã chỉ 2 vào giá trị mà 3 đã chỉ vào thời điểm đóTôi thích nghĩ về các biến số như những mũi tên nhỏ trỏ đến các vị trí trong bộ nhớ của máy tính. Vì vậy, khi chúng tôi nói 0, chúng tôi đang nói. "Này công cụ JavaScript, tôi muốn bạn tạo một vị trí trong bộ nhớ có giá trị là 1 và sau đó tạo một mũi tên (biến) có tên là 3 trỏ đến vị trí đó trong bộ nhớ. "Sau đó, khi chúng ta nói. 3, chúng tôi đang nói "Này công cụ JavaScript, tôi muốn bạn tạo một mũi tên (biến) có tên là 2 trỏ đến cùng một địa điểm mà 3 trỏ đến vào lúc này. "Theo cách tương tự, khi bạn gọi một hàm, công cụ JavaScript sẽ tạo một biến mới cho các đối số của hàm. Trong trường hợp của chúng tôi, chúng tôi đã gọi 6 và công cụ JavaScript về cơ bản đã làm điều này
Vì vậy, sau này khi chúng ta thực hiện 7, nó không ảnh hưởng đến 8 vì chúng là các biến hoàn toàn khác nhauCho dù bạn coi đây là một hạn chế hay một tính năng, thực tế là đây là cách nó hoạt động. Nếu bạn muốn giữ hai biến cập nhật với nhau, có một cách để làm điều đó. tốt, sắp xếp. Ý tưởng là thế này. thay vì thay đổi vị trí mũi tên (biến), bạn có thể thay đổi vị trí mũi tên trỏ tới. Ví dụ
Trong trường hợp này, chúng tôi không chỉ định lại a mà thay vào đó thay đổi giá trị mà 3 đang trỏ tới. Và bởi vì 2 tình cờ được chỉ vào cùng một thứ nên cả hai đều nhận được bản cập nhậtVì vậy, hãy áp dụng giải pháp này cho vấn đề 0 của chúng ta
Hậu tố 2 là viết tắt của "tham chiếu", nghĩa là giá trị mà biến trỏ tới chỉ được sử dụng để tham chiếu một giá trị khác (trong trường hợp của chúng ta là thuộc tính 3 của một đối tượng)Đương nhiên có sự đánh đổi với điều này, nhưng tôi rất vui vì đặc tả JavaScript yêu cầu các đối số hàm được truyền theo giá trị thay vì tham chiếu. Và cách giải quyết không quá rắc rối khi bạn có nhu cầu (điều này khá hiếm vì khả năng thay đổi khiến chương trình khó hiểu hơn bình thường). Hy vọng rằng sẽ giúp. Chúc may mắn Làm cách nào để chuyển giá trị này trong JavaScript?Truyền theo giá trị. Trong Truyền theo 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ố . Vì vậy, mọi thay đổi được thực hiện bên trong hàm không ảnh hưởng đến giá trị ban đầu. Trong Truyền theo giá trị, các tham số được truyền dưới dạng đối số tạo bản sao của chính nó.
Làm cách nào để chuyển tham chiếu hàm trong JavaScript?Nếu bạn muốn truyền một hàm, chỉ cần tham chiếu nó theo tên mà không có dấu ngoặc đơn. . hàm foo(x) { cảnh báo(x); . ". hàm foo(x) { cảnh báo(x); . "( Bạn có thể chuyển một biến vào một hàm không?Tham số của hàm là tham chiếu đến đối tượng, được truyền theo giá trị. Khi bạn truyền một biến cho một hàm, python sẽ chuyển tham chiếu đến đối tượng mà biến tham chiếu tới (giá trị) . Không phải bản thân biến. Các hàm có một bảng biến cục bộ được gọi là không gian tên cục bộ.
Làm cách nào để chuyển đối tượng trong hàm JavaScript?Điều này cực kỳ đơn giản. Bạn chỉ cần đặt các cặp khóa-giá trị của mình cách nhau bằng '. ' bên trong một tập hợp các dấu ngoặc nhọn() và đối tượng của bạn sẽ sẵn sàng phân phối (hoặc tiêu thụ). Chúng ta có thể truyền một đối tượng vào một hàm JavaScript, nhưng các đối số phải có cùng tên với tên thuộc tính Đối tượng. |