Показать сообщение отдельно
  #17 (permalink)  
Старый 05.01.2011, 10:16
Интересующийся
Отправить личное сообщение для Kepa Посмотреть профиль Найти все сообщения от Kepa
 
Регистрация: 05.12.2010
Сообщений: 27

Всем привет, всех с прошедшим! (:

Тоже недавно начал изучать Флэнагана, поэтому решил втиснуться с вопросами в эту темку, надеюсь автор топика не будет против.

К сути:

Прочитал про разницу в работе с переменными "по значению" и "по ссылке" и возник вопрос по строкам - для "иллюстрации" передачи элементарных типов по значению Флэнаган применяет такой код:
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 у нас просто ссылка на первую строку, которая не удалилась, т.к. на неё еще есть "активная" ссылка. Что-то в этом роде?

Последний раз редактировалось Kepa, 05.01.2011 в 10:27.
Ответить с цитированием