Можно ли дважды изменить значение переменной JavaScript в одной и той же функции? - PullRequest
1 голос
/ 24 ноября 2011

Не уверен, считается ли это наилучшей практикой или вам следует это делать, но у меня есть небольшой блок Javascript, и я хочу знать, можете ли вы объявить переменную, отобразить эту переменную, а затем переназначить ее и отобразить снова?Синтаксически это кажется правильным, но я бы предположил, что это не лучшая практика, и его следует избегать?

Примечание: я не писал этот блок, я просто хочу знать, все ли в порядке, или я должен изменить его и использовать 2Код переменных ниже:

var u1 = 'something';

if (u1.indexOf('Accept') > 0)
{       
var URL = 'some URL';
document.writeln(URL);
URL = 'another URL';
document.writeln(URL);
}

Заранее спасибо.

РЕДАКТИРОВАТЬ: Спасибо за ответы, думал, что это немного глупо.: /

Ответы [ 6 ]

5 голосов
/ 24 ноября 2011

Да, вы можете

Вы можете изменять значение переменной столько раз, сколько вам нужно.Переменные довольно часто используются повторно, поэтому мы экономим ресурсы памяти.Не так, как вы их использовали (потому что это пример, в котором было бы лучше предоставлять константные строки непосредственно при вызове функций), но подумайте о повседневном примере, когда мы даже не думаем о множественных присвоениях значений переменных.Цикл 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, он в конечном итоге перезаписывает строку, хранящуюся в переменной.

3 голосов
/ 24 ноября 2011

Почему бы и нет?Конечно, это нормально, чтобы изменить значение переменной столько раз, сколько вы хотите.Это на самом деле причина, почему она называется «переменная», а не «константа»:)

2 голосов
/ 24 ноября 2011

Я бы сказал, что это совершенно нормально.

Однако имейте в виду, что это может вызвать проблемы с асинхронным кодом.Возьмем, к примеру, следующий пример, где async принимает обратный вызов, который запускается через некоторое время:

var a = 123;

async(function() {
    alert(a); // alerts 456, because `a` was set to 456
              // *before* this callback was run.
              // Because there is only one `a`, that variable
              // has been overridden
});

a = 456;

async(function() {
    alert(a); // alerts 456
});
1 голос
/ 24 ноября 2011

Да, это возможно, и в этом случае нет смысла создавать новую переменную.Однако, если у вас много кода переназначения переменной позже, это определенно может сбить с толку, особенно если сначала это объект, а потом строка.

1 голос
/ 24 ноября 2011

Переменные могут быть переназначены в JavaScript. Должны они или нет, это вопрос стиля и контекста.

0 голосов
/ 24 ноября 2011

Я обычно предпочитаю повторно использовать переменные, а не создавать новые

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...