[问题] 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