将字符串传递给函数是按值复制还是通过引用传递?

时间:2013-03-27 16:40:23

标签: javascript

由于JavaScript中的字符串是基本类型,因此将字符串传递给函数会创建它的本地副本吗?我想知道这一点,因为你不能在创建字符串后修改它们,所以JavaScript VMs不会仅仅将字符串的地址传递给内部函数似乎是不合逻辑的。

如果有人要告诉我我不应该担心这个问题(与网络开发人员交谈时会发生这种情况),我正在研究HTML5游戏和垃圾收集是一个主要问题,所以我真的需要知道。

2 个答案:

答案 0 :(得分:10)

该字符串将通过引用传递。

字符串不可变,因此每当您尝试更改它时,您都会获得一个新字符串(例如,通过执行value+="more")。

另见:What does immutable mean?

@ T.J。克劳德:按价值与参考 - 如果您正在查看语言定义,那么您是正确的。但是我不认为有一个实现实际上创建了字符串的副本,因为它会非常慢。此外,由于字符串是不可变的原语,因此无需复制它们,因为它们无法更改。

答案 1 :(得分:5)

我相信规范在这一点上是沉默的。然而,它将是一个真正的愚蠢的实现,它传递字符串的实际内容,而不是在内存中传递对该内容的引用,即使字符串在理论上是“原始的”。我怀疑大多数实现都会处理“原始”字符串,因为它们处理对象引用(在这方面,显然不在其他一些字符串中,例如===),但只是处理Object陷阱。