我想提高对可重入这个词的理解。
这个函数是可重入的吗?
function* foo() {
yield 1;
yield 2;
}
和这个?
function foo() {
return 1;
}
和这个?
var x = 0;
function foo() {
return x++;
}
和这个?
function foo() {
setTimeout(foo, 1000);
}
可重入函数是可以恢复执行的函数:
在计算中,如果计算机程序或子例程可以在执行过程中被中断,然后在其先前的调用完成执行之前再次安全地调用(“重新进入”),则该计算机程序或子例程被称为可重入。
在浏览器/节点 JavaScript 中,所有多处理都是协作的(没有中断或上下文切换)。JavaScript 中的常规函数始终运行完成。 (1)
因此,在您的情况下,唯一的可重入函数是第一个函数,因为它不会运行其代码直至完成,并且可以在以后恢复。
- 第二个函数只是一个常规函数。
- 第三个使用外部作用域,这有点类似,因为它让函数保存某种状态。但这不是一回事,因为该功能无法恢复。
- 第四个立即运行完成(它安排了另一次调用 - 但这取决于该平台而不是 JavaScript)。
确实——可以这么说发电机使用可重入语法在 JavaScript 中启用协作多任务处理。在生成器之前,所有代码都运行完成。
(1) Or it never halts, but it is never interrupted. Also - in common platforms. There are platforms (like Rhino) that break the rule. They're very rare and don't use the same concurrency execution model as browser/node JS.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)