Объект меняется, переменная нет

Неожиданно в процессе отладки кода обнаружил вещь, о которой, будь у меня профильное образование, узнал бы курсе на 2.

Проще сначала написать код:

var x, y, z;
function(){
    if (...) {
        z = x;
    } else {
        z = y;
    }
    function(){
        return result
    }
    z = result;
}
Результат: х = ? y = ?

Тут x или y по-прежнему будут объявленными, но неопределёнными. Сделаем alert -получим пустые значения. Теперь определим x, y как объекты:

var x = [], y = [], z;
function(){
    if (...) {
        z = x;
    } else {
        z = y;
    }
    function(){
        return result
    }
    z.push(result);
}

Результат: x = result или y = result Теперь если вывести через alert значение x или y, будет выведено их единственное значение, присвоенное с помощью третьей переменной. Таким образом, в JavaScript переменная не может быть ссылкой на другую переменную, но может быть ссылкой на объект. Поиграться можно тут: http://jsfiddle.net/DmwsG/

Теги: