![]() |
|
Модераторы: Sardar, Aliance |
![]()
|
|
| ®™ |
|
||||||
|
Unregistered |
oldArr - заполнен числами, например. newArr - пустой. есть ли разница в копировании? так:
или так:
|
||||||
|
|||||||
| ®™ |
|
|||
|
Unregistered |
Есть:
|
|||
|
||||
| Sardar |
|
|||
![]() Бегун ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6986 Регистрация: 19.4.2002 Где: Нидерланды, Groni ngen Репутация: 78 Всего: 317 |
Конечно есть, массивы это обьекты, а обьекты в JS всегда передаються по сылке. Другими словами newArr=oldAr создаёт вторую ссылку указывающую на один и тот же массив. Юзаем метод а что бы снять копию с части или всего массива.
-------------------- Опыт - сын ошибок трудных © А. С. Пушкин Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik Оценить мои качества можно тут. |
|||
|
||||
| GIK |
|
||||
![]() Добрый человек ![]() ![]() Профиль Группа: Участник Сообщений: 985 Регистрация: 3.6.2005 Где: я только не небыв ал Репутация: 6 Всего: 14 |
Дак это что значит oldArr ссылается на newArr получается???? А иначе как он получает значения массива newArr???? Я до последнего не верил в этот, даже переменные разные сделал и разместил в разных функциях но все также???. По подробнее можно откоментировать плз.
-------------------- Математика=>пиво=> програмирование, три вещи последовательны и совместимы !!! Программирование - это не деятельнось! Программирование - это состояние души! Бог - самый крутой программист. |
||||
|
|||||
| Sardar |
|
|||
![]() Бегун ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6986 Регистрация: 19.4.2002 Где: Нидерланды, Groni ngen Репутация: 78 Всего: 317 |
Не правильное мышление, и oldArr и newArr это ссылки на один массив (значение). Написав newArr=new Array(); мы запишем в newArr ссылку на новый массив, старый при этом никуда не исчезнет до тех пор, пока на него есть ссылки, т.е. счётчик ссылок больше нуля. Изменяя массив по одной ссылке ты получишь те же изменения и в другой, так как обе указывают на одно и то же значение. Дважды повторил, если ещё не ясно, то почитай ман по PHP (ссылки), Java и другим языкам, всё почти также Кстати из опыта заметил, что все примитивы должны передаваться по значению, а все обьекты, включая массивы и строки должны по ссылке, это эффективно и удобно. -------------------- Опыт - сын ошибок трудных © А. С. Пушкин Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik Оценить мои качества можно тут. |
|||
|
||||
| GIK |
|
|||
![]() Добрый человек ![]() ![]() Профиль Группа: Участник Сообщений: 985 Регистрация: 3.6.2005 Где: я только не небыв ал Репутация: 6 Всего: 14 |
Так, я запутался.
Объесняю свою логику. Если я правильно понял, то изменения касаются массива new Array() (т.е. изменение происходят в нем), на который в свою очередь ссылаются две переменные массива, которые не содержат значений а содержат ссылку. ВЫВОД: newArr ссылаясь на массив new Array() , изменяет значения в НЕМ, а поскольку oldArr ссылается на него же, он получает все изменения. Я правильно, на это раз понял? Если что извиняюсь за назойливость, все таки хочется докопатся до истины не влезая в книгу -------------------- Математика=>пиво=> програмирование, три вещи последовательны и совместимы !!! Программирование - это не деятельнось! Программирование - это состояние души! Бог - самый крутой программист. |
|||
|
||||
| Sardar |
|
|||
![]() Бегун ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6986 Регистрация: 19.4.2002 Где: Нидерланды, Groni ngen Репутация: 78 Всего: 317 |
Нет!
Представь себе два хранилища в памяти/мешка/таблицы как угодно, главное что их два и они в разных местах. Одно у нас под универсальные ссылки, другое под значения. Все примитивы сохраняються в ссылке, примитивы это целые и вещественные числа. Все обьекты создаються в другом хранилище для значений, в хранилище ссылок создаёться ссылка на обькт, ссылка указыает на обьект в хранилище значений. Обьекты это обьекты, массивы, строки. Все значения имеют некий счётчик ссылок. Каждый раз как у обьекта появляеться новая ссылка, он инкрементируеться и наоборот. Когда счётчик станет 0 (нет более ссылок) он может быть сразу удалён, или помечен на удаление после (в продвинутых сборщиках мусора), одно важно - значение утеряно и получить его больше не возможно. Видим что при таком раскладе у нас не может быть ссылки на другую переменную, но у нас могут быть несколько ссылок на одно и то же значение. Разберём такой код:
Помним что реализация интерпретаторов может сильно различаться, например var oldArr на самом деле не выделяет память под новую ссылку сразу, а зачастую все переменные в функции внутри блока создаються разом. Да и сама реализация ссылок и обьектных значений различаеться - НО! поведение "снаружи" такое же как описано выше. Тобой названный подход я использую в своём Trilobite Scripting Language, скриптовая настройка над вебсервером в embedded окружении, eZ80 проц, 512кб памяти, поэтому нет ни мощей ни места на сборщик мусора и другие фичи -------------------- Опыт - сын ошибок трудных © А. С. Пушкин Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik Оценить мои качества можно тут. |
|||
|
||||
| GIK |
|
|||
![]() Добрый человек ![]() ![]() Профиль Группа: Участник Сообщений: 985 Регистрация: 3.6.2005 Где: я только не небыв ал Репутация: 6 Всего: 14 |
Так. Теперь в голове три реализации (смутно правда) вышеизложенной темы, осталось все сопоставить.
Но по ссыдкам и про счетчик все ясно, большое спасибо тебе Остадоль разобратся в изменении значений.
значит получается что если мы присвоили бы не текстовое значение, а новое значение например oldArr=['n1','n2','n3'] то поменяли бы значения в массиве, по ссылке которая хранится в oldArr?, или же создался бы новый массив а счетчик старого контенера уменьшился бы на 1 (т.е. в данном случае исчез бы)? Протестить это помоему нельзя, по крайней мере я не знаю как это сделать. -------------------- Математика=>пиво=> програмирование, три вещи последовательны и совместимы !!! Программирование - это не деятельнось! Программирование - это состояние души! Бог - самый крутой программист. |
|||
|
||||
| Sardar |
|
|||
![]() Бегун ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6986 Регистрация: 19.4.2002 Где: Нидерланды, Groni ngen Репутация: 78 Всего: 317 |
Теоретически так:
Практически если массивы реализован хештаблицей с ковшами из связанных списков, то интерпретатору проще отбросить ковшы с инфой, чем создавать всю хештаблицу по новой. То есть это зависит от реализации, но! поведение (а это главное Понятия счётчики, способы хранений ссылок, значений и т.д это всё детали реализации, прикладному программисту важно как это внешне работает, т.е. что значения отдельны от ссылок, значения сами по себе убиваються когда ссылок более нет и т.д. -------------------- Опыт - сын ошибок трудных © А. С. Пушкин Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik Оценить мои качества можно тут. |
|||
|
||||
| Alex_B |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 122 Регистрация: 24.4.2007 Репутация: нет Всего: 1 |
|
|||
|
||||
![]()
|
| Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | JavaScript: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |