You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
如果 javascript 是按引用传递,那么 obj 就会被修改为指向 name 为 'Greg' 的新对象,然而 obj 的 name 仍为 'Nicholas'。这说明即使在函数内部修改了参数的值,但原始的引用仍然保持不变。
回到 StackOverflow 上的问题,高票问答得出的结论是
Instead, the situation is that the item passed in is passed by value. But the item that is passed by value is itself a reference. Technically, this is called call-by-sharing.
For immutable objects, there is no real difference between call by sharing and call by value, except if object identity is visible in the language. The use of call by sharing with mutable objects is an alternative to input/output parameters:[9] the parameter is not assigned to (the argument is not overwritten and object identity is not changed), but the object (argument) is mutated.
The text was updated successfully, but these errors were encountered:
楠哥在第一周文章分享中分享了一个 StackOverflow 上讨论 javascript 是按值传递还是按引用传递的问题:Is JavaScript a pass-by-reference or pass-by-value language?
关于 javascript 中的函数参数传递类型的讨论,大致就是在基本类型和引用类型之间产生了矛盾。
example 1
count 经过
addTen
方法处理后没有变化,所以是按值传递吗?example 2
obj 经过
setName
方法处理后,添加了name
属性,并赋值为了Nicholas
,所以是按引用传递吗?我专门翻了一下《Javascript 高级程序设计》,在 4.1 节 基本类型和引用类型的值(p70)里其实已经给出了结论
所以 example 2 中的 obj 并不是按引用传递,而是 按值传递,只不过这个值就是 obj 在内存中的地址。
书中给出的解释如下
基本数据类型显而易见是按值传递,就不解释了。而如何证明对象也是按值传递的呢,看下面这个例子
如果 javascript 是按引用传递,那么 obj 就会被修改为指向 name 为 'Greg' 的新对象,然而 obj 的 name 仍为 'Nicholas'。这说明即使在函数内部修改了参数的值,但原始的引用仍然保持不变。
回到 StackOverflow 上的问题,高票问答得出的结论是
回答大概也是这个意思,但是他提到了另外一种说法:call-by-sharing。从 call-by-sharing 的行为来看,确实可以将 javascript 的参数传递描述成 call-by-sharing。
The text was updated successfully, but these errors were encountered: