Ответ 1
Область действия переменной, объявленной с помощью var
- это вся функция, в которой она объявлена, она не начинается с точки объявления. Он часто описывается как подъем объявления переменных и может рассматриваться как перемещение всех объявлений переменных в начало функции. Для определений функций и объявление, и "назначение" перемещаются вместе.
function b() {
a = 10;
function a() {}
}
эквивалентно
function b() {
var a = function() {};
a = 10;
}
это означает, что вы объявляете новую переменную a
, а a = 10
изменяет только внутреннюю переменную a
, а не внешнюю. Мы говорим, что внутренняя переменная a
затеняет внешнюю.
Во втором случае во внутренней области нет переменной a
, что означает, что внешняя используется и изменяется (при поиске переменной вы переходите из внутренней области в самую внешнюю после цепочки замыкания).