этот вопрос о спецификации ECMAScript (ECMA-262, 8-е издание)
В эти дни меня немного смущают Job и Job Queue.
Вот некоторые вопросы.
1: В ECMA-262 существует два вида очереди заданий. один ScriptJobs
другой PromiseJobs
. Итак, ведьма имеет предпочтение?
2: В ECMA-262 есть только определение RunJobs
абстрактной операции. Я хочу знать, когда и где выполняется RunJobs
?
3. Я выполнил кодовый удар, В FF 60.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script>
window.addEventListener('DOMContentLoaded', () => {
let x = document.createElement('script');
x.innerHTML = 'console.log(3);';
console.log('script start');
document.body.appendChild(x);
setTimeout(() => console.log(1), 0);
Promise.resolve(2).then(console.log);
console.log('script is end');
});
</script>
</head>
<body>
</body>
</html>
и он регистрирует:
script start
3
script end
2
1
Почему элемент script
выполняется в контексте выполнения, созданном динамически?
в. Пусть nextQueue будет непустой очередью заданий, выбранной способом, определяемым реализацией. Если все очереди заданий пусты, результат определяется реализацией.
разветвлен из ECMA-262 RunJobs. Как спецификация HTML определяет способ, определяемый реализацией?
@Берги нравится это? PromiseJobs: [] , ScriptJobs: []
ScriptJobs.push(something);
// pop and run by Event loop
// blow will happens while `something` runs
PromiseJobs.push(anotherOne);
ScriptJobs.push(theother);
//end of `something`
//and in here, PromiseJobs will pop?