[問題] Java by value VS JS by reference

作者: chiang0514 (chiang0514)   2017-07-29 13:00:05
最近學了
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
作者: eight0 (欸XD)   2017-07-29 13:20:00
是指 pass by reference? JS 沒有這種功能
作者: chiang0514 (chiang0514)   2017-07-29 14:37:00
我看Udemy 克服JS奇怪步份,說物件是by reference可是我覺得比較像JAVA的 byy value
作者: CloudyWing (孤單ㄉ翼)   2017-07-29 15:03:00
因為object的變數存的是reference,所以有些書為了讓人了解,就會直接說是pass by reference
作者: ssccg (23)   2017-07-29 15:32:00
這種傳送法叫做 pass by (reference) value說成pass by reference基本上是錯的,pass by reference的話對參數就等於原變數,以你的例子在函式中把obj = null那d也會變null,而不再指向c。js沒有這種的在談傳參數方法時,重點只要放在參數那個變數也就是objobj指向的物件的屬性可以改應該用物件是mutable來說明
作者: CloudyWing (孤單ㄉ翼)   2017-07-29 16:02:00
寫C#後才發現當初所謂的pass by reference只是為了讓大家知道傳遞value type和reference type的差異,並不準確,但和周遭的人糾正都是pass by value時被說分太細了,和新人這樣提會弄混他們 =.=a
作者: s25g5d4 (function(){})()   2017-07-29 16:16:00
作者: bibo9901 (function(){})()   2017-07-30 09:39:00
call-by-sharing 只是描述行為而已 沒有解釋任何事會講到call-by-value/reference都是以C/C++的角度去看js/java/python的reference 就是 C/C++的pointermutable obj 是 T* ptr; immutable obj 是 const T *ptr

Links booklink

Contact Us: admin [ a t ] ucptt.com