将字符串传递给函数是按值复制还是按引用传递
Does passing a string to a function copy it by value or pass it by reference?
由于JavaScript中的字符串是基本类型,将字符串传递给函数会创建它的本地副本吗?我想知道这一点,因为在创建字符串之后,你不能修改它们,所以JavaScriptVM不只是在内部将字符串的地址传递给函数似乎是不合逻辑的。
如果有人告诉我我不应该担心这一点(在与网络开发人员交谈时经常发生这种情况(,我正在开发HTML5游戏,垃圾收集是一个主要问题,所以我真的需要知道。
字符串将通过引用传递。
字符串是不可变的,所以每当你试图更改它时,你就会得到一个新的字符串(例如,通过执行value+="more"
(。
另请参阅:什么是不可变的?
@T.J.Crowder:按值与按引用——如果你在看语言定义,你是正确的。然而,我不认为有一个实现能真正创建字符串的副本,因为它会非常慢。此外,由于字符串是不可变的基元,因此不需要复制它们,因为它们不能更改。
我认为规范在这一点上是沉默的。然而,传递字符串的实际内容,而不是在内存中传递对该内容的引用,这将是一个真正愚蠢的实现,即使字符串在理论上是"基元"。我怀疑大多数实现对待"基元"字符串就像对待对象引用一样(在这方面,显然在其他一些实现中不是这样,比如===
(,只是不使用Object
标记。
相关文章:
- 通过引用传递JavaScript对象
- 如何正确引用传递到淘汰中的当前元素的属性.JS
- 我们可以在JavaScript函数中通过引用传递变量吗
- 在函数中按值传递对象
- 在javascript/angular中创建播放列表(按值复制数组,但按引用设置嵌套对象)
- 如何将对象引用传递到 mootools 中另一个对象的构造函数中
- 变量/对象是否按值传递,为什么我不能在 javascript 中使用变量更改对象的属性
- Javascript :按值传递字符串
- 节点.js V8 通过引用传递
- 如何在 JavaScript 中通过引用传递变量
- 将函数引用传递给嵌套闭包
- 为什么这个数组是通过引用而不是按值传递的,我该如何改变它
- 按引用传递
- 数组/对象按值复制/按引用复制
- 将字符串传递给函数是按值复制还是按引用传递
- 是JavaScript按引用传递或按值传递
- 尝试在JavaScript中复制引用传递行为:如何适当地修改我的代码
- 变量赋值 - Javascript: array1[0] = array2[0];这是按值传递还是按引用传递
- 我想按值传递数组,但似乎它是通过引用传递的,数组上的 .map 操作没有给出预期的结果
- 将按引用调用作为按值调用传递