Да, вы можете
Вы можете изменять значение переменной столько раз, сколько вам нужно.Переменные довольно часто используются повторно, поэтому мы экономим ресурсы памяти.Не так, как вы их использовали (потому что это пример, в котором было бы лучше предоставлять константные строки непосредственно при вызове функций), но подумайте о повседневном примере, когда мы даже не думаем о множественных присвоениях значений переменных.Цикл for
:
for (var i = 0; i < 100; i++)
{
...
}
В этом цикле переменная i
получает новое значение 101 раз.Это довольно очевидный пример, когда мы вообще не думаем об этом, но, кроме этого, мы могли бы иметь набор циклов и более явно использовать одну и ту же переменную и присвоить ей значение много раз, например:
var counter = 0;
for(var item = GetLinkedListFirstItem(); item != null; item = item.Next)
{
counter++;
}
// other code...
counter = 0;
while (counter < 10 || someOtherCondition)
{
// do something else
}
Это может быть гораздо лучший пример явного повторного использования переменных, когда его значение изменяется много раз и для разных целей.
Именование переменной
Иногда повторное использование переменной нежелательно /нежелательны.И вот тогда у нас есть значимое имя переменной, например isUserLoggedIn
.Трудно повторно использовать такую переменную для других целей, потому что это сделает код неуправляемым.
Переменные, которые обычно используются повторно, могут, следовательно, быть итераторами (т.е. i
) или обычно именуемыми переменными без особого значения.Или переменные с более универсальным именем (например, finished
), которые можно использовать повторно в различных контекстах, которые могут быть связаны с таким именем переменной.
Асинхронный код
В некоторых ситуациях вы можетеесть проблемы, даже если смотреть на код может показаться прекрасно.И именно тогда вы используете асинхронные функции, что часто бывает при использовании Ajax-вызовов или вызовов с отложенным временем (т. Е. setTimeout
).Рассмотрим следующий код:
var loaded = false;
$.ajax({
url: "...",
type: "POST",
success: function(){
loaded = true;
}
});
if (loaded === true)
{
// do something important
}
// ok loaded not used any more, so we can reuse it
// we can easily change its type from number to string or anything else
loaded = "Peter loaded his gun";
В этом коде есть ошибка, поскольку важный код не будет выполнен.Когда-либо!Это довольно частое заблуждение, когда неопытные разработчики не понимают асинхронность.
Подсказка : когда код выдает Ajax-вызов, он не ожидает ответа, а продолжает выполнение и выполняетif
заявление.Несмотря на то, что Ajax-вызов отвечал бы за 0 тактов, функция успеха не будет выполняться до тех пор, пока выполняющийся в данный момент код не завершит выполнение.Вот как работает Javascript.Выполнение кода в очереди.В конце концов, когда исполняется асинхронный код Ajax, он в конечном итоге перезаписывает строку, хранящуюся в переменной.