由于JavaScript中的字符串是基本类型,因此将字符串传递给函数会创建它的本地副本吗?我想知道这一点,因为你不能在创建字符串后修改它们,所以JavaScript VMs不会仅仅将字符串的地址传递给内部函数似乎是不合逻辑的。
如果有人要告诉我我不应该担心这个问题(与网络开发人员交谈时会发生这种情况),我正在研究HTML5游戏和垃圾收集是一个主要问题,所以我真的需要知道。
答案 0 :(得分:10)
该字符串将通过引用传递。
字符串不可变,因此每当您尝试更改它时,您都会获得一个新字符串(例如,通过执行value+="more"
)。
@ T.J。克劳德:按价值与参考 - 如果您正在查看语言定义,那么您是正确的。但是我不认为有一个实现实际上创建了字符串的副本,因为它会非常慢。此外,由于字符串是不可变的原语,因此无需复制它们,因为它们无法更改。
答案 1 :(得分:5)
我相信规范在这一点上是沉默的。然而,它将是一个真正的愚蠢的实现,它传递字符串的实际内容,而不是在内存中传递对该内容的引用,即使字符串在理论上是“原始的”。我怀疑大多数实现都会处理“原始”字符串,因为它们处理对象引用(在这方面,显然不在其他一些字符串中,例如===
),但只是处理Object
陷阱。