Глобальные переменные определены для всей программы в целом.
Локальные переменные определены только для всей функции, в которой они объявлены, а также для любых функций, вложенных в эту функцию.
С помощью инструкции var можно объявить одну и ту же переменную несколько раз.
Если повторное объявление переменной содержит инициализатор, то оно действует как обычная инструкция присваивания.
Если переменной уже присвоено значение, то при повторном объявлении оно остается прежним.
var a; // a = undefined
var a = 1; // a = 1
var a = 2; // a = 2
var a; // a = 2
То есть при повторном объявлении переменной ключевое слово var можно не замечать.
Код выше по смыслу всегда будет равно силен следующему коду.
var a; // a = undefined
a = 1; // a = 1
a = 2; // a = 2
a; // a = 2
При определении любой переменной, например так:
var a = 1;
всегда незримо выполняются следующие действия:
var a; // a = undefined
a = 1; // a = 1
Попытка прочитать значение необъявленной переменной вызовет ошибку.
Глобальные переменные, объявленные без ключевого слова var невозможно удалить с помощью оператора delete!!!
Только переменные объявленные внутри функций имеют локальную область видимости.
Переменные объявленные вне функций являются глобальными и видны все коду идущему ниже их.
var scope = 'global';
function F () {
var scope = 'local';
return scope;
}
F(); // 'local'
Обявление переменной внутри функции без инструкции var изменяет значение глобальной переменной с тем же именем.
var scope = 'global';
function F () {
scope = 'local';
return scope;
}
F (); // 'local'
console.log(scope); // 'local'
Аргументы функции всегда считаются локальными переменными, объявленными внутри функции.
function F (a, b, c) {
}
Этот код равносилен этому
function F (a, b, c) {
var a = a;
var b = b;
var c = c;
}
Переменные объявленные в теле функции видны везде внутри тела функции из-за того, что определение (но не присвоение значений) всех переменных скрыто всегда происходит в самом начале тела функции.
function F () {
var a = 1;
a = a +1;
a = a + 2;
var b = 2;
}
Этот код равносилен этому
function F () {
var a;
var b;
a = 1;
a = a +1;
a = a + 2;
b = 2;
}
Это называется поднятие определений всех переменных в начало тела функции.
Это важно знать, чтобы не написать неправильный код. Все переменные объявляем в начале функции, а присвоение им значений можно делать где угодно ниже.
Переменные объявленные внутри тела функции не видны за пределами тела функции.
Комментариев нет:
Отправить комментарий