вторник, 2 июля 2013 г.

JavaScript Особенности определения переменных

Глобальные переменные определены для всей программы в целом.
Локальные переменные определены только для всей функции, в которой они объявлены, а также для любых функций, вложенных в эту функцию.

С помощью инструкции 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;
}

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

Переменные объявленные внутри тела функции не видны за пределами тела функции.

Комментариев нет:

Отправить комментарий