Почему неопределенный var не добавляется в оконный объект JavaScript?

Насколько я знаю, следующее объявление не добавит никакого значения к переменной aa:

var aa = undefined;

function a () {
    var aa;
    console.log(aa);  // here aa is still undefined
    if(!aa) {
        aa = 11;  // should add to the globle scope (window Object)
        bb = 12;  // should add to the globle scope (window Object)
    }
    console.log(aa);
    console.log(aa);  // should be 11
    console.log(bb);  // should be 12
}

Теперь, если я хочу использовать доступ к VARS aa а также bbЯ могу получить доступ только bb не aa, Мой вопрос почему aa невозможно получить доступ извне, потому что в объявлении я не назначил ему никакого значения, и оно все еще не определено?

Спасибо.

2 ответа

Решение

Посмотри мои комментарии

var aa = undefined; // global scope

function a () {
    if(true) { // useless
        var aa; // declare aa in the function scope and assign undefined
        // to work on the global aa you would remove the above line
        console.log(aa);  // here aa is still undefined
        if(!aa) {
            aa = 11;  // reassign the local aa to 11
            bb = 12;  // assign 12 to the global var bb
        }
        console.log(aa); // aa is 11
    }
    console.log(aa);  // still in the function scope so it output 11
    console.log(bb);  // should be 12
}
console.log(aa) // undefined nothing has change for the global aa

Для более подробной информации читайте эту замечательную книгу

Попробуйте удалить var aa; from within your function.

What's happening here is function scope. Вы объявили aa as a local variable within function a, the local variable IS getting set to 11.

Другие вопросы по тегам