Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 24.12.2010, 17:49
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Да.
Ответить с цитированием
  #12 (permalink)  
Старый 24.12.2010, 23:32
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

прикольно
Ответить с цитированием
  #13 (permalink)  
Старый 03.01.2011, 06:50
Аспирант
Отправить личное сообщение для JSTalker Посмотреть профиль Найти все сообщения от JSTalker
 
Регистрация: 29.06.2009
Сообщений: 92

Сообщение от Kolyaj Посмотреть сообщение
Отличия между var и без var:
<script type="text/javascript">
try {
    var a = 1;
    b = 1;
    delete a;
    delete b;
    alert(a);
    alert(b);
} catch (e) {
    alert('Error: ' + e.message);
}
</script>
хм..
получается б толком не удалилась?
как это соотносится с отличиями в создании переменной?
хм, ну теоретически я понял впрочем.
Ответить с цитированием
  #14 (permalink)  
Старый 03.01.2011, 09:37
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

как раз b удалилась
var a = 1;
b = 2;
alert([window['a'], window['b']]);

без var в window создается соответствующее свойство
Ответить с цитированием
  #15 (permalink)  
Старый 03.01.2011, 22:44
Аспирант
Отправить личное сообщение для JSTalker Посмотреть профиль Найти все сообщения от JSTalker
 
Регистрация: 29.06.2009
Сообщений: 92

x-yuri,
а теперь понял. Т.е. с варом получается этакая независимая (от глобального объекта) переменная?
Ответить с цитированием
  #16 (permalink)  
Старый 04.01.2011, 11:16
Особый гость
Посмотреть профиль Найти все сообщения от monolithed
 
Регистрация: 02.04.2010
Сообщений: 4,260

Сообщение от JSTalker
а теперь понял. Т.е. с варом получается этакая независимая (от глобального объекта) переменная?
ключевое слово var позволяет объявить переменную в текущей области видимости, без него - свойство глобального объекта window, которое можно удалить в отличии от объвленной переменной с var
Ответить с цитированием
  #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.
Ответить с цитированием
  #18 (permalink)  
Старый 05.01.2011, 11:38
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Kepa,
все переменные в JS передаются по значению. Просто в случае объектов значением является ссылка на объект. Это сначала трудно осознать, но потом всё встаёт на свои места.

http://dmitrysoshnikov.com/ecmascrip...tion-strategy/
Ответить с цитированием
  #19 (permalink)  
Старый 05.01.2011, 11:43
Особый гость
Посмотреть профиль Найти все сообщения от monolithed
 
Регистрация: 02.04.2010
Сообщений: 4,260

Числа и строки - элементарный тип данных и передаются они по значению.
А происходит это потому, что ссылочные типы данных не имеют фиксировнного размера и не могут храниться в выделенных 8 байтах памяти.
var a = '10', b = '10';
alert(a*b); //100 выполняем операцию умножения со строковыми операндами, результат которых будет преобразован в числовое значение.

var a = '10', b = '10';
alert(parseInt(a)+parseInt(b)); //20 выполняем операцию сложения со строковыми операндами, результат которых будет преобразован в числовое значение. Метод parseInt() преобразует значение в числовое, т.к. опрератор + может работать как со строками так и с числами



Сообщение от Kepa
P.S. Кстати, почему во втором отрывке кода нет нумерации строк? Тот же тэг JS использовал...
меньше 4 строк

Последний раз редактировалось monolithed, 05.01.2011 в 11:55.
Ответить с цитированием
  #20 (permalink)  
Старый 05.01.2011, 11:45
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от monolithed
var a = '10', b = '10';
alert(a+b); //20 выполняем операцию сложения со строковыми операндами, результат которых будет преобразован в числовое значение.
var a = '10', b = '10';
alert(a+b); //20 выполняем операцию сложения со строковыми операндами, результат которых будет преобразован в числовое значение.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как вывести содержимое PHP файла с помощью JS? pavdin Серверные языки и технологии 6 22.12.2010 14:16
Не получается передать переменную из JS в PHP Lion_astana AJAX и COMET 2 23.11.2010 17:23
помогите задать переменную в js bsgroupua Общие вопросы Javascript 3 01.02.2010 18:28
Вывод JS значения в одну строку в HTML velo Общие вопросы Javascript 7 15.12.2009 03:57
Самая лучшая книга по JS? ulandj Оффтопик 2 06.04.2009 11:35