6
if(true) { 
    let m = "yo"; 

    console.log(m); 
} 

console.log(m) 

Выход:Порядок выполнения JavaScript: почему этот условный код выполняется после кода, который следует за ним?

ReferenceError: m is not defined 
yo 

Таким образом, код на линии 4 выполняется после того, как код на линии 8.

ли мое использование let иметь ничего общего с этим?

EDIT: После чтения комментариев я понял, что это может быть из-за моего времени выполнения. Вот как я вижу это в Firefox каждую ночь:

firefox nightly let m

EDIT 2: Если это действительно только мое время работы, то есть последствия для производства кода из-за чего-то вроде этого? Непоследовательное поведение в браузерах? Как я защищаю это?

+0

Вы используете это в Chrome? – Ben

+1

[Я не могу воспроизвести это.] (Http://jsfiddle.net/nxzt5npp/) - и я просматриваю это в редакторе FF dev. – Andy

+0

Я получаю это поведение в Firefox Nightly, консоль. –

ответ

2

Итак, я считаю, что поведение среды FF в порядке. Беглый взгляд на спецификацию (6.2.3.1 и т. Д.) Указывает на то, что код должен выполняться по строкам, до второго console.log(m), в который бросается ReferenceError.

Я подозреваю, что это только «выглядит забавным» из-за порядка, в котором консоль выбирает рендеринг первого console.log и сообщение об исключении (например, это обратное к Chrome).

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

Ниже приведено подтверждение моего анализа с предупреждением, отображаемым до того, как будет зарегистрировано исключение.

if(true) { 
    let m = "yo"; 

    alert(m); 
} 

console.log(m) 
+0

Не могли бы вы подтвердить, что это ошибка? У меня нет знаний, чтобы вывести то, что вы говорите. [На самом деле мне трудно понять :-)]. Возможно, я должен подать отчет? –

+0

Мне нужно будет проверить ошибки ссылки на спецификацию – Ben

+2

@adityamenon Бросать опорную ошибку * раньше * и не выполнять 'if' и' console.log' на всех * будет * ошибкой. Кажется, что код работает отлично, что журнал печатается после ошибки, запутанной, но может быть покрыт реализацией объекта 'console'. Да, вы должны указать ошибку, потому что это поведение довольно неожиданно, но не с соблюдением ES6, а скорее с компонентом devtools. (И после того, как вы это сделали, пожалуйста, соедините его здесь) – Bergi

 Смежные вопросы

  • Нет связанных вопросов^_^