Существует четыре способа объявления переменной в JavaScript:
var
, что приведет к тому, что эта переменная будет объявлена функцией.
let
/ const
, который будет охватывать эту переменную объявленным блоком.
- Неявное объявление, которое будет охватывать эту переменную глобально (если только оно ранее не было объявлено в другой области, в этом случае вместо этого оно будет переназначено).
var a = b = 3;
В этом выражении мы объявляем a
в области действия функции со значением b = 3
. Выражение b = 3
имеет значение 3, но также неявно объявляет переменную b
, что означает, что b
будет объявлено в глобальной области видимости.
Вне функции объявлена переменная b
(поскольку она была неявно объявлена глобально), а a
- нет (поскольку она была объявлена только в области действия функции).
Однако следует избегать неявно объявленных переменных (и желательно использовать let
и const
вместо var
), поэтому приведенный выше код должен быть написан так:
(function() {
let a = 3;
let b = a;
});
Или, если вы действительно хотите, чтобы переменные также объявлялись вне функции:
let a, b;
(function() {
// NOTE: not implicit declaration since a and b are both already declared
a = 3;
b = a;
})();