作者chiang0514 (ethan0514)
看板Ajax
標題[問題] Java by value VS JS by reference
時間Sat Jul 29 13:00:05 2017
最近學了
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://webptt.com/m.aspx?n=bbs/Ajax/M.1501304408.A.6F7.html
※ chiang0514:轉錄至看板 java 07/29 13:02
※ 編輯: chiang0514 (123.192.30.30), 07/29/2017 13:04:01
1F:推 eight0: 是指 pass by reference? JS 沒有這種功能 07/29 13:20
2F:→ chiang0514: 我看Udemy 克服JS奇怪步份,說物件是by reference 07/29 14:37
3F:→ chiang0514: 可是我覺得比較像JAVA的 byy value 07/29 14:39
※ 編輯: chiang0514 (123.192.30.30), 07/29/2017 14:41:40
4F:推 CloudyWing: 因為object的變數存的是reference,所以有些書為了讓 07/29 15:03
5F:→ CloudyWing: 人了解,就會直接說是pass by reference 07/29 15:04
6F:→ ssccg: 這種傳送法叫做 pass by (reference) value 07/29 15:32
7F:→ ssccg: 說成pass by reference基本上是錯的,pass by reference的 07/29 15:34
8F:→ ssccg: 話對參數就等於原變數,以你的例子在函式中把obj = null 07/29 15:37
9F:→ ssccg: 那d也會變null,而不再指向c。js沒有這種的 07/29 15:37
10F:→ ssccg: 在談傳參數方法時,重點只要放在參數那個變數也就是obj 07/29 15:49
11F:→ ssccg: obj指向的物件的屬性可以改應該用物件是mutable來說明 07/29 15:50
12F:推 CloudyWing: 寫C#後才發現當初所謂的pass by reference只是為了讓 07/29 16:02
13F:→ CloudyWing: 大家知道傳遞value type和reference type的差異,並不 07/29 16:03
14F:→ CloudyWing: 準確,但和周遭的人糾正都是pass by value時 07/29 16:04
15F:→ CloudyWing: 被說分太細了,和新人這樣提會弄混他們 =.=a 07/29 16:05
17F:→ s25g5d4: 見 Call by sharing 章節 07/29 16:16
18F:→ bibo9901: call-by-sharing 只是描述行為而已 沒有解釋任何事 07/30 09:39
19F:→ bibo9901: 會講到call-by-value/reference都是以C/C++的角度去看 07/30 09:40
20F:→ bibo9901: js/java/python的reference 就是 C/C++的pointer 07/30 09:42
21F:→ bibo9901: mutable obj 是 T* ptr; immutable obj 是 const T *ptr 07/30 09:44