【发布时间】:2018-10-26 15:26:40
【问题描述】:
关于 ECMAScript 规范(ECMA-262 第 8 版)的这个问题
这些天来,我对 Job 和 Job Queue 有点困惑。
这里有一些问题。
1:在ECMA-262中,有两种Job Queue。一个是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 元素在动态创建的执行上下文上执行?
c。让 nextQueue 是一个以实现定义的方式选择的非空作业队列。我摔倒 作业队列为空,结果由实现定义。
来自 ECMA-262 RunJobs。 HTML规范如何定义实现定义的方式?
@Bergi 喜欢这样吗? 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?
【问题讨论】:
-
@JaredSmith 我已经看过那个视频了。但是js规范没有解释.. :(我想知道js规范..
标签: javascript ecmascript-6 specifications ecmascript-2017