Оказывается, браузеры по-разному относятся к итерированию цикла for-of
. Судите сами:
for(const a of []) ; // chrome: ok, ff: syntax error
На что ругается Firefox
? Говорит, что a
указана, как константа
, а используется как переменная
. Но почему?
for(let a of [1, 2]) setTimeout(() => alert(a));
Chrome
: 1, 2Firefox
: 2, 2
Всё просто. Chrome
каждую итерацию пересоздаёт scope
, а Firefox
довольствуется одним. И если с const
ошибка вылезет сразу (правда только в Firefox
). То в случае чего-нибудь асинхронного ждите трудно-вылавливаемые баги, которые проявятся только в Firefox
-е. В спеку мне лезть лень, но код генерируемый babel
-ем ближе к Chrome
-варианту. Кто прав?