В отличие от языков программирования, таких как C и Java, переменные в JavaScript не имеют типа, и все определения переменных используют ключевые слова var:
Кода -копия выглядит следующим образом:
var a;
var m, n;
var x = 42, y = "test";
Если переменной не присваивается значение после определения ее, значение переменной не определен. Например, значения трех переменных a, m и n в приведенном выше коде не определены.
Поскольку переменные в JS не имеют типа, можно назначить различные типы значений одной и той же переменной, например:
Кода -копия выглядит следующим образом:
var b = "temp";
console.log (typeof b); // string
b = 108;
Console.log (typeof b); // номер
В дополнение к различным типам назначений к одной и той же переменной, переменные также могут быть многократно определены в JavaScript; Если это сделано, оператор определения переменной после первого раза эквивалентен оператору назначения:
Кода -копия выглядит следующим образом:
var c = "hello";
Console.log (c); // Привет
var c = true;
Console.log (c); // true
В строгом режиме стандарта Ecmascript все определения переменных требуют использования ключевого слова VAR. Если строгий режим не используется, когда программа JS присваивает значение неопределенной переменной, программа создаст свойство в Global объекте JS с тем же именем, что и переменная, то есть создать новую глобальную переменную. Этот подход принесет много проблем (таких как глобальное загрязнение переменной между несколькими программами JS и т. Д.), Которые вызовут значительные проблемы для последующего обслуживания; Следовательно, в реальном процессе разработки этого подхода следует избегать как можно больше.
Хранение переменных
Если определенная переменная является глобальной переменной, а ключевое слово var не используется во время процесса определения переменной, то переменная будет существовать как свойство глобального объекта. Его можно получить путем доступа к соответствующим свойствам этого (глобального объекта), или его можно удалить из глобального объекта с помощью ключевого слова Delete:
Кода -копия выглядит следующим образом:
var e = "GlobalVariableValue"; // Определено за пределами какой -либо функции, это глобальная переменная, но не хранится в «Это»
f = "GlobalVariableValue2";
this.g = "GlobalVariableValue3";
Console.log (this.e); // не определен
console.log (this.f); // globalvariablevalue2
console.log (this.g); // globalvariablevalue3
Удалить F;
Удалить G;
console.log (this.f); // не определен
console.log (this.g); // не определен
Для каждого вызова функции в JavaScript JavaScript создаст локальный объект для хранения локальных переменных, определенных в функции; Если внутри функции есть вложенная функция, JavaScript определит вложенный локальный объект внутри уже определенного локального объекта. Для функции существует столько слоев вложенных определений функций, сколько и многих слоев вложенных местных объектов, как и их. Этот локальный объект называется «объект вызова функции» («Объект вызова» в Ecmascript 3 и был переименован в «Запись декларативной среды» в Ecmascript 5, но я лично думаю, что имя в Ecmascript 3 легче понять).
В отличие от глобальных объектов, JavaScript не предоставляет никакого способа получить доступ к этим локальным объектам (функциональные объекты вызова). Следовательно, разработчики не могут работать на этих локальных объектах. Тем не менее, понимание этих объектов вызова функции будет очень полезно понять некоторые концепции в JavaScript, такие как объем и закрытие переменных.