1
victorhe0601 OP 按照仅仅是传入 reference 的说法,在重新赋值的时候,应该 reference 的对应的值就会发生变化吧。
|
2
shintendo 2019-03-22 15:20:02 +08:00 1
外面的 spaceship 和里面的 obj 是两个不同的变量,只不过内容相同,都是指向同一个对象的引用
你在里面给 obj 重新赋值,就使它指向了另一个对象 js 传参从来没有 by reference,只有 by value |
3
dablwow 2019-03-22 15:25:31 +08:00 1
重新赋值改变的是 obj 保存的地址,原对象并没有被改变
|
4
victorhe0601 OP @shintendo 嗯,清楚了。底层的逻辑:字面值(这个例子中的{
identified : false, 'transport type' : 'flying' })是先存入内存,字面值有了 reference 之后才被赋值给参数 obj,而不是一个变量赋值了之后,再把字面值存入。对吧? |
5
victorhe0601 OP 谢谢 @shintendo @victorhe0601。结贴。希望这里有个结贴的功能来确保 close 掉的帖子:可以被搜索(内外部),但是不会在 parent 论坛显示或者说明 close 掉了,不然会浪费大家的时间,以为还没有解决。
|
6
victorhe0601 OP @shintendo 关于传参是否有 by reference,https://stackoverflow.com/questions/7744611/pass-variables-by-reference-in-javascript,你对 JS 真的弄得非常清楚。再次感谢。
|
7
xiadd 2019-03-22 15:49:19 +08:00
完全把这里当 stackoverflow 用了 我看看你还能发几个类似的帖子
|
8
victorhe0601 OP @xiadd, 有通过 stackoverflow 去提问,但是因为刚刚进入,有发帖限制。不过我确实把这里当成中国的 stackoverflow。我会暂时停止发帖转到 segmentfault 试一下。
|
9
zzjas98 2019-03-23 02:37:39 +08:00 1
这个和 pass be reference 还是 pass by value 没有什么关系,就是对 reference 的理解有了偏差。
https://s3-us-west-1.amazonaws.com/zzjas/public/Image_nKHsu0XuiO.png 这么写不涉及 functoin call 也是一样的问题。 reference 就是类似一个 int,存了一个内存地址而已,无论在哪里你用 = 去给这个 int 重新赋值时候,你只改了这一个 reference 存的数字,其他的 reference 的值都不会被改变。你去改这个新地址下的 object,别的 reference 当然不会被改。 |