Должен ли работать следующий код?
(async () => {
await new Promise(r => setTimeout(r, 1000))
useNum();
})();
let num = 10;
function useNum() {
return num + 1;
}
https://jsbin.com/tayotitepa/edit?html,output
Safari на iOS (v13.3) говорит, что это невозможно (переменная num
не существует), тогда как Chrome и Firefox считают, что это нормально.
Если вы удалите строку await new Promise...
, Chrome и Firefox будут жаловаться.
Кажется, что Chrome и Firefox здесь правы, потому что мы не await
используем сразу же вызванную асинхронную функцию, и поэтому к тому времени, когда строка await new Promise...
будет завершена, остальная часть скрипта уже будет обработана. Но я решил проверить, потому что, возможно, спецификация говорит, что речь идет строго о порядке объявления переменных и использовании этих переменных, и поэтому не имеет значения "время" использование переменных.
async/await
. Сафари просто неправильно. - person Pointy   schedule 15.02.2020let
иconst
подняты; просто он работает иначе, чемvar
подъем. - person Pointy   schedule 15.02.2020