当前位置:  开发笔记 > 编程语言 > 正文

JavaScript中的重入

如何解决《JavaScript中的重入》经验,为你挑选了1个好方法。

我想提高我对reentrant一​​词的理解.

这个功能是可重入的吗?

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

还有这个?

function foo() {
  return 1;
}

还有这个?

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

还有这个?

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

Benjamin Gru.. 6

reentrent函数是一个可以恢复执行的函数:

在计算中,计算机程序或子程序被称为可重入,如果它可以在执行过程中被中断,然后在其先前的调用完成执行之前再次安全地再次调用("重新输入").

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

所以在你的情况下 - 唯一的reentrent函数是第一个,因为它没有运行它的代码完成,可以在以后恢复.

第二个功能只是一个常规功能.

第三个使用外部作用域,它有点类似,因为它允许函数保持某种状态.虽然功能无法恢复,但这不是一回事.

第四个只是立即运行完成(它安排了它的另一个调用 - 但这取决于平台而不是JavaScript).

实际上 - 可以说生成器使用重复的语法在JavaScript中实现协作式多任务处理.在生成器之前,所有代码都运行完成

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



1> Benjamin Gru..:

reentrent函数是一个可以恢复执行的函数:

在计算中,计算机程序或子程序被称为可重入,如果它可以在执行过程中被中断,然后在其先前的调用完成执行之前再次安全地再次调用("重新输入").

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

所以在你的情况下 - 唯一的reentrent函数是第一个,因为它没有运行它的代码完成,可以在以后恢复.

第二个功能只是一个常规功能.

第三个使用外部作用域,它有点类似,因为它允许函数保持某种状态.虽然功能无法恢复,但这不是一回事.

第四个只是立即运行完成(它安排了它的另一个调用 - 但这取决于平台而不是JavaScript).

实际上 - 可以说生成器使用重复的语法在JavaScript中实现协作式多任务处理.在生成器之前,所有代码都运行完成

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

推荐阅读
女女的家_747
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有