看板 Ajax 關於我們 聯絡資訊
最近學了 JS的by refenerce用法 跟JAVA 的by value 去比較 我這邊的理解是一模一樣 為什麼名稱會不一樣呢? 這裡有點不太理解 希望有高人能指點一下 JS: var c = { greeting: 'hi' }; var d; d = c; c.greeting = 'hello'; console.log(c); console.log(d); // by reference (even as parameters) function changeGreeting(obj) { obj.greeting = 'Hola'; // mutate } changeGreeting(d); console.log(c); console.log(d); JAVA: public static void main(String[] args) { StringBuffer a = new StringBuffer("A"); StringBuffer b = new StringBuffer("B"); StringBuffer c = a; operate(a,b); System.out.println(a+","+b);//AB,B System.out.println("c:" + c); } static void operate(StringBuffer x,StringBuffer y){ x.append(y); y=x; } https://pjchender.blogspot.tw/2016/03/javascriptby-referenceby-value.html 這是那堂課的相關筆記 裡面提到JS是 by reference -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 123.192.30.30 ※ 文章網址: https://www.ptt.cc/bbs/Ajax/M.1501304408.A.6F7.html chiang0514:轉錄至看板 java 07/29 13:02 ※ 編輯: chiang0514 (123.192.30.30), 07/29/2017 13:04:01
eight0: 是指 pass by reference? JS 沒有這種功能 07/29 13:20
chiang0514: 我看Udemy 克服JS奇怪步份,說物件是by reference 07/29 14:37
chiang0514: 可是我覺得比較像JAVA的 byy value 07/29 14:39
※ 編輯: chiang0514 (123.192.30.30), 07/29/2017 14:41:40
CloudyWing: 因為object的變數存的是reference,所以有些書為了讓 07/29 15:03
CloudyWing: 人了解,就會直接說是pass by reference 07/29 15:04
ssccg: 這種傳送法叫做 pass by (reference) value 07/29 15:32
ssccg: 說成pass by reference基本上是錯的,pass by reference的 07/29 15:34
ssccg: 話對參數就等於原變數,以你的例子在函式中把obj = null 07/29 15:37
ssccg: 那d也會變null,而不再指向c。js沒有這種的 07/29 15:37
ssccg: 在談傳參數方法時,重點只要放在參數那個變數也就是obj 07/29 15:49
ssccg: obj指向的物件的屬性可以改應該用物件是mutable來說明 07/29 15:50
CloudyWing: 寫C#後才發現當初所謂的pass by reference只是為了讓 07/29 16:02
CloudyWing: 大家知道傳遞value type和reference type的差異,並不 07/29 16:03
CloudyWing: 準確,但和周遭的人糾正都是pass by value時 07/29 16:04
CloudyWing: 被說分太細了,和新人這樣提會弄混他們 =.=a 07/29 16:05
s25g5d4: 見 Call by sharing 章節 07/29 16:16
bibo9901: call-by-sharing 只是描述行為而已 沒有解釋任何事 07/30 09:39
bibo9901: 會講到call-by-value/reference都是以C/C++的角度去看 07/30 09:40
bibo9901: js/java/python的reference 就是 C/C++的pointer 07/30 09:42
bibo9901: mutable obj 是 T* ptr; immutable obj 是 const T *ptr 07/30 09:44