Ответ 1
В JavaScript переменная является глобальной или локальной функцией. Внутри функции нет таких объектов, как вложенные области (если только вы не вставляете одну функцию внутри другой функции).
Указание документов Mozilla JavaScript:
Так как оба параметра функции a
и ваш var a
объявлены в той же области действия, они разрешают одну и ту же переменную.
Смотрите также: Какова область видимости переменных в JavaScript?
Обратите внимание, что поля объектов также могут рассматриваться как еще один уровень охвата - но это не имеет отношения к вашему вопросу.
Кроме того, как указывает торазабуро в его комментарии ниже - В ECMAScript 6 введено ключевое слово let
, которое позволяет создавать истинные вложенные области внутри функций. Однако эта функция достаточно новая, что я изначально не считал ее заслуживающей упоминания (так как пока не очень безопасно использовать в производственном коде). Например, это выглядит как Firefox официально не поддержит новую конструкцию let
до их новой версии в конце этого месяца (январь 2016 г.).