В следующем коде я ожидал, что 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