13

由于 JavaScript 中的字符串是基本类型,将字符串传递给函数会创建它的本地副本吗?我想知道这一点,因为您无法在创建字符串后对其进行修改,因此 JavaScript VM 不只是在内部将字符串的地址传递给函数似乎不合逻辑。

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

4

2 回答 2

12

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

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

另请参阅:不可变是什么意思?

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

于 2013-03-27T16:48:49.833 回答
5

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

于 2013-03-27T16:53:47.260 回答