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

dre*_*eta 12 javascript

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

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

lak*_*tak 10

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

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

另见:不可变的意思是什么?

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

  • *"字符串将通过引用传递."*你说这是事实.你有证据吗?我相信这是真的(或者更确切地说,我相信对字符串的引用是通过值传递的,**在JavaScript中没有**是"通过引用传递"),但是如果不能引用某些内容,我会毫不犹豫地说出来作为秃头的事实. (2认同)

T.J*_*der 5

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