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

Does passing a string to a function copy it by value or pass it by reference?

本文关键字:按引用传递 复制 函数 字符串      更新时间:2023-09-26

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

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

字符串将通过引用传递。

字符串是不可变的,所以每当你试图更改它时,你就会得到一个新的字符串(例如,通过执行value+="more"(。

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

@T.J.Crowder:按值与按引用——如果你在看语言定义,你是正确的。然而,我不认为有一个实现能真正创建字符串的副本,因为它会非常慢。此外,由于字符串是不可变的基元,因此不需要复制它们,因为它们不能更改。

我认为规范在这一点上是沉默的。然而,传递字符串的实际内容,而不是在内存中传递对该内容的引用,这将是一个真正愚蠢的实现,即使字符串在理论上是"基元"。我怀疑大多数实现对待"基元"字符串就像对待对象引用一样(在这方面,显然在其他一些实现中不是这样,比如===(,只是不使用Object标记。