Изменение типа глобальной переменной Javascript

В Javascript я могу назначить глобальную переменную в разных типах данных в разных функциях. Например:

var a = 1;
function foo(){
  a = a + 10;  //a is number in foo
}

function bar(){
  a = a + "hello";  //a is string in bar
  foo();  //a is string in foo now
}
foo();
bar();

Мой пример — это простая демонстрация, и я полагаю, что большинство программистов Javascript не будут ее писать. Однако есть ли практическое применение такой динамической функции, когда глобальная переменная меняет свой тип данных в разных функциях?


person shwu    schedule 04.08.2014    source источник
comment
динамическая типизация может быть полезна, но на эту тему ведутся большие споры en.wikipedia.org/wiki/   -  person Doug T.    schedule 04.08.2014
comment
Спасибо @DougT. довожу до вашего сведения. Но я все еще хочу знать, есть ли реальное или практическое использование в моем случае, даже если я вижу, что большинство программистов JavaScript не будут этого делать?   -  person shwu    schedule 04.08.2014


Ответы (3)


Динамическая типизация позволяет вам делать такие вещи:

var a = false;    
if(need to show msg 1){a="message 1"};
if(need to show msg 2){a="message 2"};     
if(a){display(a);}

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

Кстати, когда вы пишете a = 1, это практически эквивалентно window.a = 1; глобальные переменные можно рассматривать как свойства объекта окна (.точности см. здесь).
Поэтому, когда вы пишете a = a + "hello";, a становится строкой везде, а не только 'in foo'.

person IazertyuiopI    schedule 04.08.2014

  1. var a = 1; //global variable
  2. В foo(), если (1) определено

function foo(){ a; //In this case a will be global variable and a = 1 } function foo(){ var a; //In this case a will be private variable, a = undefined but global varibale a not change }

person HDT    schedule 04.08.2014

Это зависит от того, что вы пытаетесь сделать. В Javascript глобальные переменные, которые преобразуются в разные типы, могут быть опасны, если вы используете много обратных вызовов. Функции обратного вызова, запускающие много (конечно, асинхронно) и манипулирующие глобальной переменной, могут привести к тому, что вы в конечном итоге читаете неправильные данные в одной или нескольких функциях обратного вызова, и последует неожиданный результат, отклоняющийся от намерения вашего кода.

person Mike D    schedule 04.08.2014