hum*_*ace 5 javascript concurrency dom-events
“即时事件”的概念/概念是否存在于 Javascript 实现中?
在这个对“ javascript 是否保证是单线程的? ”这个问题的回答中,作者提到了一些他称之为即时事件的东西。这种即时事件是一个回调函数(即类似于浏览器窗口的“调整大小” ),它在其他一些 Javascript 代码尚未“完成”时执行,因为它被阻止(即)。window.onresize = callbackfunc;
alert("alert");
让我用一个例子来澄清:
// (1) Setup a "immediate event" (a callback for "resize");
window.onresize = function(){ console.log("log resize"); };
// (2) Run some code which contains a blocking alert()
console.log("log A");
console.log("log B");
alert("alert");
console.log("log C");
Run Code Online (Sandbox Code Playgroud)
(作为 jsfiddle http://jsfiddle.net/rj25m/5/)
上面脚本针对不同情况/场景的输出:
情况 1(不调整大小)
日志A 日志B 日志C
案例 2(Windows 在 之后调整大小alert("alert");
)
日志A 日志B 日志C 日志调整大小
案例 3有趣的案例(在alert("alert");
弹出窗口期间调整了 Windows 的大小)
日志A 日志B 日志调整大小 日志C
注意:请注意(正如在提到的答案中也提到的),在某些系统上,在出现模态警报期间调整窗口大小并不容易。例如,在 MS Windows 中,需要临时减少屏幕旋转以引起窗口大小的调整。在其他系统中,大多数 linux 事件虽然有警报,但您仍然可以调整窗口大小。
注意 2:我只能在 Firefox 中重现(案例 3)输出(使用 26.0 版本)。IE 和 Chrome 似乎并不“支持”那些“即时事件”,而且似乎注意到了调整大小事件,但计划在被alert("alert")
.
案例 4(与案例 3 类似,但使用 Chrome/IE)
日志A 日志B 日志C 日志调整大小
我对 Firefox 构建中观察到的行为以及术语“立即事件”的用法感到困惑。我怀疑这样的事情是否真的存在。这就是我在这里问的原因,我希望有人熟悉并且可以参考 ECMAScript 的规范和/或参考实现的规范来回答。查看 MDN 对“运行到完成”的实际想法的引用,
我倾向于认为由即时事件描述的行为是不需要的,没有命名并且实际上是 Firefox 错误。alert
自从他们引入新的(标签模式警报)以来,firefox 有一些麻烦。
我很高兴获得洞察力并愿意回答评论
Javascript 中不存在“立即事件”,通常代码永远不会被中断来处理事件。
像警报这样的模态弹出窗口的情况是唯一的例外。在某些浏览器中,当您调用警报时,方法中的代码可能会“暂停”,并且警报打开时会发生事件。通常,警报打开时不会有需要处理的事件,但显然您发现了异常。
通常,“运行至完成”原则是规则。除非您使用类似alert
或 的东西prompt
,否则您可以依赖不间断运行的代码,直到您退出函数。实际上,当代码运行时,浏览器中什么也没有发生;当 JavaScript 运行时,页面不会更新,甚至 GIF 动画也不会移动。
归档时间: |
|
查看次数: |
529 次 |
最近记录: |