gpt4 book ai didi

javascript - JavaScript 中的重入

转载 作者:可可西里 更新时间:2023-11-01 02:43:47 30 4
gpt4 key购买 nike

我想提高对可重入这个词的理解。

这个函数是可重入的吗?

function* foo() {
yield 1;
yield 2;
}

还有这个?

function foo() {
return 1;
}

还有这个?

var x = 0;
function foo() {
return x++;
}

还有这个?

function foo() {
setTimeout(foo, 1000);
}

最佳答案

可重入函数是可以恢复执行的函数:

In computing, a computer program or subroutine is called reentrant if it can be interrupted in the middle of its execution and then safely called again ("re-entered") before its previous invocations complete execution.

在浏览器/节点 JavaScript 中,所有多处理都是协作的(没有中断或上下文切换)。 在 JavaScript 中,常规函数总是运行完成。 (1)

因此在您的情况下 - 唯一的可重入函数是第一个函数,因为它不会运行其代码直到完成并且可以在以后恢复。

  • 第二个函数只是一个常规函数。
  • 第三个使用外部作用域,这有点相似,因为它让函数保持某些状态。这不是一回事,因为无法恢复该功能。
  • 第四个会立即运行完成(它会安排对它的另一次调用 - 但这取决于平台,而不是 JavaScript)。

确实 - 可以说 generators 使用可重入语法在 JavaScript 中启用协作式多任务处理。在生成器之前,所有代码都运行完成。

(1) 或者它从不停止,但它从不中断。另外 - 在通用平台上。有些平台(如 Rhino)打破了规则。它们非常罕见,并且不使用与浏览器/节点 JS 相同的并发执行模型。

关于javascript - JavaScript 中的重入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34129978/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com