Перемещаются ли переменные в области действия в начало как переменные в глобальной области видимости? - PullRequest
0 голосов
/ 15 марта 2019

Мне не удалось найти четкий ответ, поэтому я попробую его здесь.

РЕДАКТИРОВАТЬ: этот вопрос не о том, будет ли доступна вар с начала области действия, в которой она находитсяСкорее, я хотел бы знать, объявляется ли var, когда объявляются глобальные переменные, или когда вызывается функция.

Рассмотрим этот пример:

var a = "foo";
function xyz(){
    var b = "bar";
}
xyz();

при запуске этогокод, куда будет поднята переменная b?

это будет:

declare function xyz
declare var a
assign value "foo" to var a
execute xyz()
>> declare var b
assign value "bar" to var b

или будет:

declare function xyz
declare var a
>> declare var b
assign value "foo" to var a
execute xyz()
assign value "bar" to var b

Я знаю, что переменная bне доступен из глобальной области, но мне любопытно, в каком порядке здесь происходят вещи.

Заранее спасибо

1 Ответ

2 голосов
/ 15 марта 2019

Переменная b инициализируется при выполнении xyz(), она не инициализируется во время интерпретации.

function host() {
  var b;
}
var a;

var aIsDeclared = true; 
var bIsDeclared = true; 

try{ a; }
catch(e) {
    if(e.name == "ReferenceError") {
        aIsDeclared = false;
    }
}

try{ b; }
catch(e) {
    if(e.name == "ReferenceError") {
        bIsDeclared = false;
    }
}

console.log("a is declared : ", aIsDeclared)
console.log("b is declared : ", bIsDeclared)
...