Копирование строк (касательно памяти)
Всем привет!
Такой вот у меня вопрос. Искал, читал, но что-то внятного ничего не нашел. Интересует меня вот что... Допустим есть у меня строка, скажем 5000 символов. Эту строку я выдираю из html документа и потом около 10 функций поочередно с ней работают. Вопрос в потреблении памяти. Как более рационально мне передавать эту строку между функциями. Код мой оформлен в таком виде: var NewLib = (function(){ return{ data: { string: 'та самая строка' } func1: function(){ }, func2: function(){ }, .......... funcN: function(){ } }; }()); В NewLib.data.string я записываю строку и нижеследующие функции должны с ней работать. Как лучше: 1) передавать строку явно в параметры функций 2) пусть функции просто обновляют NewLib.data.string Что происходит если делается так: var str1 = 'длинная строка'; var str2 = str1; Как я понимаю, переменная str1 при присваивании ей значения занимает определенное место в памяти. Если я переменной str2 присвою str1, то str2 займет еще столько же памяти... или нет? |
Цитата:
В JS (и ряде других языков) строка есть объект, только неизменяемый. str1 - лишь ссылка на данные. в str2 будет ссылка на те же данные. а вот в случае, например, var str2 = str1 + "aaa", в str2 попадет ссылка уже на новый объект. |
Яростный Меч,
Понятно. Ну у меня получается как... csx.data.code - это исходная строка. В функции я ее не передаю, они сами ее берут так: var csx = (function(){return { data: { code: '' } func: function(){ var code = csx.data.code; ......... обработка строки (замена слов, символов...) ......... csx.data.code = code; } };}()) То есть функция взяла строку извне и положида ее в свою локальную переменную. Обработала эту переменную и обновила ею внешнюю строку. Как-то коряво, но иначе неудобно. В любом случае внутри каждой функции-обработчика будет создаваться новая строка на время работы функции. PS неудобно использовать csx.data.code. Просто code короче, поэтому и перекладываю. |
:write:
если сам обьект не менять ссылка останется прежней иначе ссылка ведёт на новый обьект var obj1 = { a: 42 }; var obj2 = obj1; obj1.b = 100500 ; alert(JSON.stringify(obj2)) |
Цитата:
потому если можешь воспользоваться замененной строкой несколько раз - сохрани ее в другую переменную. |
Цитата:
|
Часовой пояс GMT +3, время: 20:34. |