Env*_*Set 2 javascript specifications ecmascript-6 ecmascript-2017
关于ECMAScript规范的问题(ECMA-262第8版)
这几天,我对Job和Job Queue感到困惑.
这是一些问题.
1:在ECMA-262中,有两种作业队列.一个是ScriptJobs另一个是PromiseJobs.那么,女巫有偏好吗?
2:在ECMA-262中,只有RunJobs抽象操作的定义.我想知道RunJobs执行的时间和地点?
我执行代码打击,在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>
Run Code Online (Sandbox Code Playgroud)
并记录:
script start
3
script end
2
1
Run Code Online (Sandbox Code Playgroud)
为什么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?
Run Code Online (Sandbox Code Playgroud)
哪一个有偏好?
都不是.规范声明 " 此规范未定义服务多个作业队列的顺序. "队列只是指定每个队列的工具,作业以FIFO顺序执行.
我想知道
RunJobs执行的时间和地点?
这在很大程度上取决于实施情况.在像node.js这样的环境中,它会在进程启动时被调用 - 它是基本的事件循环公式.当然会有更多的作业队列,例如定时器或异步IO操作.
为什么脚本元素在动态创建的执行上下文上执行?
因为HTML规范很奇怪.请查看https://www.html5rocks.com/en/tutorials/speed/script-loading/或加载并执行脚本顺序以获取概述.细节可以在脚本元素的HTML5处理模型中找到,基本上可以找到
src属性并且是经典脚本(不是模块)并且未插入解析器,是的,这完全使浏览器的ECMAScript队列模型无效.在与JavaScript作业队列集成的部分中也明确说明了哪一个.
| 归档时间: |
|
| 查看次数: |
163 次 |
| 最近记录: |