Переприсвоение переменной
Доброго,
Встречается такой код: function foo(arg1) { arg1 = arg1 || 'что-то опциональное'; ... } Все работает отлично, но вопрос. Будет ли такое переприсвоение иметь негативные последствия, допустим, утечки памяти? Вообще, будет ли заново выделяться память под ту же самую переменную? Или все зашибись, не надо париться? Спасибо. |
Цитата:
|
Михаил Хе,
А вот такая ситуация вас не волнует? for (var i = 0; i < 1000; i++) { ... } Счетчику переприсваивается значение:-E Переприсвоение ничем не отличается от обычного присвоения - значение присваивается одной и той же переменной |
Цитата:
Меня насторожило, что именно происходит при переприсвоении переменной обратно на себя, может ли движок правильно "ничего не сделать, не париться попусту". |
Цитата:
Все это "одно и то же дело". Вот тебе еще одно... var s=0; var val=10; s=s+val; И такого сплошь и рядом! :D Если бы твои опасения были не напрасны - в мире JS наступил бы крах! :cray: |
Михаил Хе,
Цитата:
Кому и что оно должно? |
Давайте без эмоций, я понимаю, что дело плевое и вроде как проблем нет, но мой пример кардинально отличается от этого:
var s=0; var val=10; s=s+val; и от этого i = i + 1; В этих двух примерах движок JS реально делает действия по изменению состояния переменных. В логическом случае с var1 = var1; движок не должен ничего делать. Я правильно разъяснил? Давайте вникать. |
Михаил Хе,
Цитата:
|
Кстати, в вашем начальном примере возможно даже изменение типа переменной
function foo(arg1) { arg1 = arg1 || 'что-то опциональное'; alert(arg1); } foo(0); foo(1); foo('что-то'); |
Цитата:
Если arg1 не пустое, до операции со строкой дело не дойдет, остается arg1 = arg1. здесь память тоже не выделяется, она уже выделена на стеке, arg1 обычная стековая переменная, просто записываются данные в ячейку памяти. |
Часовой пояс GMT +3, время: 21:39. |