Подтвердить что ты не робот

Обновление переменной javascript

В в этом учебнике написано:

If you redeclare a JavaScript variable, it will not lose its value.

Почему я должен переопределять переменную? Это практично в некоторых ситуациях?

Благодарю вас

4b9b3361

Ответ 1

Это не более чем напоминание о том, что если вы это сделаете:

var x=5;
var x;
alert(x);

Результат будет 5.

Если вы повторно объявляете переменную на некоторых других языках, например, результат будет undefined или NaN, но не в javascript.

Ответ 2

Пример переопределения переменной можно найти в Google Analytics. Когда код отслеживания JavaScript инициируется Google Analytics script, он объявляет или переопределяет _gaq следующим образом:

var _gaq = _gaq || [];

Другими словами, если _gaq уже определен, _gaq "обновляется" как сам. Если он не определен, он будет объявлен впервые как пустой массив.

Это позволяет коду отслеживания Google Analytics поддерживать другие сценарии, которые могут потребоваться для использования переменной до начала кода Google Analytics. Как отметил @xralf, JavaScript позволяет это.

Повторное использование переменной полезно в ситуациях, когда неизвестно, была ли уже определена переменная.

Исключая переменную условно, как это делает код отслеживания Google Analytics, она позволяет безопасно извлекать переменную из нескольких мест.

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

Ответ 3

Зачем мне переопределять переменную?

Вы не должны. Это приводит к запутыванию кода.

Это практично в некоторых ситуациях?

Нет.

Ответ 4

В javascript нет области блока, поэтому рекомендуется обновлять переменную для целей разъяснения; это улучшает код.

Например:

for (var x=0; x< 100; x++) { }

alert(x); //In most languages, x would be out of scope here.
          //In javascript, x is still in scope.


//redeclaring a variable helps with clarification: 
var x = "hello";
alert(x);

Ответ 5

Он не теряет значение из-за Hoisting

var x = 5;
var x;

// this is same as

var x; // undefined;
x = 5;

Итак, когда вы говорите: "Если вы переопределите переменную JavaScript, она не потеряет свое значение".

В зависимости от подъема декларация (ы), все они, перемещаются в верхнюю часть. А затем назначается переменная.

var x = 25;
var x; // redeclare first time
var x; // redeclare second time

// is same as 

var x; // undefined
var x; // Not sure if this happens, but doesn't make a difference, it still undefined
x = 25;

Что касается практичности, это случается иногда. Посмотрите на ответ @steveoliver.

Ответ 6

Помните, что только переменные, объявленные с помощью var, могут быть повторно объявлены. Если вы попытаетесь повторно объявить переменную, объявленную с помощью let или const (что является синтаксисом Javascript ES2015, который должен использоваться в большинстве случаев в настоящее время), даже хуже, чем потеря значения, будет выдана ошибка:

let foo = 'foo';
let foo;

Ответ 7

В целом, можно считать, что плохой стиль имеет назначения var после других утверждений из-за проблемы подъема (см. здесь), Используя "Single var pattern" (см. Здесь), повторные обновления могут произойти только, например, в примере Стива Оливера Google Analtyics. Я бы реорганизовал приведенный выше пример:

var x, max = 100; // no further var declarations afterwards!

for (x = 0; x < max; x++) { }

alert(x);

// redeclaration 'var x = "hello"' doesn't make any sense here
// and would be complained about by JSLint/-Hint 
x = 'hello';
alert(x);

Повторная декларация может иметь смысл, если использовать значения по умолчанию для необязательных параметров (как я полагаю, это пример Google Analytics):

function abc(param1) {
  var param1 = param1 || 'default value';
}