给出以下代码:
function test() {
for(let i=0 ; i < 100000; i++) {
// Do a set of costly operations that are NOT ASYNCHRONOUS
}
}
test();
myScriptElement.onload = test;
我的假设是“不”,在第一次测试之前, myscriptElement.onload 没有机会被执行( test 函数)通话终止了 ...由于Javascript有一个“线程”,它继续执行指令,直到它到达某些异步代码,保存当前的callstack / context / etc,将它放入类似区域的作业队列,然后执行该队列中的下一个符合条件的项目或等待一个进来。
是吗?
或者,我应该确保第一个 test 函数调用已经返回,就像在布尔标志的帮助下一样:
let terminated = false;
myscriptElement.onload = function specificHandler(e) {
if (terminated) {
test();
return;
}
setTimeout(specificHandler.bind(null, e), 1000);
};
谢谢。