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