Есть диапазон целых чисел от 0000 до 9999 ...
в случае с && он здесь и останавливается, т.к. первый операнд по сути false
это про операторы с одинаковым приоритетом
alert(2)
– это такой же вызов некой функции, как и любой другой, как myalert(3)
var A = alert(1);
var B = alert(2);
var C = alert(3);
// так все три алерта выполнятся
// а результаты их выполнения попадут в переменные
A || B && C;
A === undefined; // true
myalert()
работает только ассоциативность и приоритет арифметических операторов. А вот логические операторы движок JS «оптимизирует».A && B
true
или false
, JS не всегда требуется оценить оба выражения. Сначала он проверяет A
. И если оказывается, что A == false
, то проверять B
уже никому не нужно! Ведь &&
даёт true
в единственном случае, когда оба аргумента true
.alert(2) && alert(3)
движок JS проверяет, чему равно alert(2)
Выполняет его - вы видите диалог. Но возвращает этот вызов пустоту, undefined
. Которая всё равно, что false
. Раз такое дело, второй операнд, после &&
уже проверять не требуется. Поэтому alert(3)
и не вызывается. makeCounter()
отработала один раз, записала в count
единицу и вернула другую функцию (а та запомнила своё окружение).counter()
выполняется только сама функцияcounter()
и ничего более. Строка var count = 1;
находилась вне и более ни при делах.