Передает ли строка функции функции копировать ее по значению или передавать ее по ссылке?

Так как строки в JavaScript являются базовыми типами, передает ли строка в функцию, создавая ее локальную копию? Мне интересно об этом, так как вы не можете изменять строки после того, как они были созданы, поэтому было бы нелогично, что JavaScript-машины не просто передавали строковый адрес внутри функции.

Если кто-нибудь скажет мне, что я не должен беспокоиться об этом (это часто случается при разговоре с веб-разработчиками), я работаю над играми HTML5, и сбор мусора вызывает серьезную озабоченность, поэтому мне действительно нужно знать.

Ответ 1

Строка будет передана по ссылке.

Строка не изменяема, поэтому всякий раз, когда вы пытаетесь ее изменить, вы получаете новую строку (например, делая value+="more").

Также см.: Что означает неизменяемость?

@T.J. Crowder: по значению vs по ref - если вы ищете правильное определение языка. Однако я не думаю, что есть реализация, которая фактически создает копию строки, потому что она будет невероятно медленной. Кроме того, поскольку строки являются неизменяемыми примитивами, нет необходимости копировать их, поскольку они не могут измениться.

Ответ 2

Я считаю, что в этом вопросе не говорится. Однако это была бы действительно идиотская реализация, которая передавала фактическое содержимое строки, а не передавала ссылку на этот контент в памяти, даже если строки теоретически являются "примитивами". Я подозреваю, что большинство реализаций относятся к "примитивным" строкам, поскольку они рассматривают ссылки на объекты (в этом отношении, очевидно, не в некоторых других, таких как ===), а просто не с атрибутами Object.