Возьми это к примеру.

if (b) b = 1;

Ошибка ссылки. б не определено. Имеет смысл, но если я сделаю это ...

if (b) var b = 1;

Я получаю неопределенный в консоли. и теперь, когда я смотрю, что б это показывает, как неопределенный.

Если я снова попытаюсь сделать то же самое выражение if, оно не пройдет, потому что b не является ни истиной, ни ложью, оно не определено, но я предполагаю, что мой вопрос - почему оно отображается как неопределенное? Проходит ли Javascript оператор if независимо от того, пройден оператор if или нет? Спасибо.

2
aug 24 Янв 2013 в 02:09

2 ответа

Лучший ответ

Все var перемещаются в начало области, в которой они находятся, и инициализируют свои значения undefined. Затем значение устанавливается, когда выполнение достигает строки, в которой var был изначально.

Во втором примере b инициализируется как undefined до того, как if встретится из-за var. Думайте об этом так же, как писать следующее

var b;
if (b) b = 1;

После выполнения этого кода b по-прежнему будет undefined, поскольку он никогда не попадет в блок if, поскольку начальное значение falsy .

Как упоминалось в pst, это особенность языка для конкретного языка, поэтому не ожидайте такое же поведение при написании кода на других языках.

3
Community 23 Май 2017 в 10:24

JS не проходит через оператор if, а скорее читает if часть оператора, и поскольку b не определен нигде, кроме как внутри оператора if, вы получаете {{X3 } } .

0
dmayo 23 Янв 2013 в 22:13