Всем привет, всех с прошедшим! (:
Тоже недавно начал изучать Флэнагана, поэтому решил втиснуться с вопросами в эту темку, надеюсь автор топика не будет против.
К сути:
Прочитал про разницу в работе с переменными "по значению" и "по ссылке" и возник вопрос по строкам - для "иллюстрации" передачи элементарных типов по значению Флэнаган применяет такой код:
var a = 3;
var b = a;
a = 4;
alert(b); // показывает 3
Но он говорит что строки в js неизменяемы и поэтому проверить как они передаются (по ссылке или по значению) невозможно, т.к. аналогичный код для строк не будет работать, хотя можно установить что сравниваются они по значению:
var s1 = "text";
var s2 = "tex" + "t";
alert(s1 == s2); // true
Но у меня возник вопрос, а что все-таки мешает сделать для строк такую проверку:
var str1 = "bunny";
var str2 = str1;
str1 = "rabbid";
alert(str2);// показывает bunny
По идее это показывает что строки копируются по значению, в чем тут тогда загвостка?
P.S. Кстати, почему во втором отрывке кода нет нумерации строк? Тот же тэг JS использовал...
P.P.S. Подумал, посидел, еще подумал, почитал немного дальше и пришла в голову такая мысль - получается что в описанном мною примере в str1 содержится не строка bunny, а ссылка на неё, а при "присваивании" ей новой строки "rabbid" мы создаем эту новую строку и в str1 записываем ссылку на неё, а в str2 у нас просто ссылка на первую строку, которая не удалилась, т.к. на неё еще есть "активная" ссылка. Что-то в этом роде?