В следующем коде я ожидал, что a
и b
будут 3
. Однако a
- undefined
, а b
- 3
. Почему?
(function(){
var a = b = 3;
})();
console.log(typeof a);//"undefined"
console.log(b);//3
В следующем коде я ожидал, что a
и b
будут 3
. Однако a
- undefined
, а b
- 3
. Почему?
(function(){
var a = b = 3;
})();
console.log(typeof a);//"undefined"
console.log(b);//3
Проблема заключается в том, что большинство разработчиков понимают утверждение var a = b = 3;
для сокращения:
var b = 3;
var a = b;
Но на самом деле var a = b = 3; на самом деле сокращенно:
b = 3;
var a = b;
Следовательно, b становится глобальной переменной (поскольку ей не предшествует ключевое слово var) и все еще находится в сфере видимости даже вне встроенной функции.
Причина a undefined заключается в том, что a является локальной переменной для этой самоисполняющейся анонимной функции
(function(){
var a = b = 3;
})();
var a=b=3
То же, что и:
var a = (b = 3)
А оператор var
применяется только к a
, а не к b
. Вы можете проверить синтаксис оператора var
здесь.
Поэтому a
будет определяться в локальной области, а b
будет определяться в глобальной области. Внутренняя функция a
и b
равна 3, но после возвращения функции зарегистрированная локальная переменная (a
) удаляется. Поскольку b
определяется в глобальной области видимости, он не удаляется.
a
Действительно, действительно 3, но он находится в рамках анонимной функции.
эта строка var a = b = 3
на самом деле:
b = 3
, тогда как b
объявляется как глобальная переменная.
Возвращаемое значение присваивания express b=3
- это да, назначенное значение 3
.
var a = the return value of previous expression
, таким образом, равен var a = 3
, но на этот раз a
- локальная переменная.
За пределами анонимной функции b
доступен, но a
даже не существует, из-за того, что он не определен в глобальной области.
Я написал в следующем стиле:
console.log(typeof b);//"number"
console.log(a);// error with a is not defined
Таким образом, в случае вашего a
не распознается, поскольку он не находится в глобальной области. НО b
рассматривается как глобальный. var
используется для объявления локальной переменной.
Сравните приведенный ниже код
'use strict'
(function(){
var a = b = 3; // ERROR. Prevents global variable name clash
})();
И
(function(){
var a = b = 3; // Silently assigns 3 to a global variable b
})();
console.log(typeof a);//"undefined"
console.log(b);// 3