JavaScript 中的重入

2024-01-26

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

这个函数是可重入的吗?

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(使用前将#替换为@)

JavaScript 中的重入 的相关文章

随机推荐

  • 如何使用mochijson在erlang中编码数据结构?

    我正在使用mochiweb 我不知道如何使用它的json编码器来处理复杂的数据结构 mochijson 和 mochijson2 有什么区别 有什么好的例子吗 我总是收到以下错误 46 gt T6 struct hello asdf fro
  • ListViewItem 工具提示 WPF

    我需要的是 当每个列表视图项的鼠标在工具提示中显示每个列表视图的所有数据时 这是我的视图模型的一部分 using GalaSoft MvvmLight using GalaSoft MvvmLight CommandWpf private
  • Servlet 参数和 doPut

    尝试使用 HttpServlet doPut 从 PUT 请求获取参数 public void doPut HttpServletRequest request HttpServletResponse response String nam
  • 如何从 UIImage 获取文件路径?

    通常情况相反 您使用路径来显示图像 我想知道如果您已经有了图像 是否可以获得路径 如果您已经拥有图像 即已将文件添加到资源中 则可以使用它来获取文件路径 NSString string NSBundle mainBundle pathFor
  • 如何使用 freetype 渲染“Segoe UI Emoji”中的彩色字形?

    我正在尝试使用最新的 freetype 2 8 1 我从源代码编译了 x64 调试版本 没有单线程或多线程 和 OpenGL 从 Windows Segoe UI Emoji 字体渲染彩色字形 所以我用seguiemj ttf来自Windo
  • 使用Aptana Studio导入git项目但权限被拒绝(publickey)

    我尝试将现有项目从 github 存储库导入 aptana studio 但出现错误 提示权限被拒绝 公钥 fatal 远端意外挂断 我确保将 ssh 添加到我在 github 中的帐户 我还运行了 ssh vT 电子邮件受保护 cdn c
  • 将原始类型指针转换为结构指针 - 对齐和填充?

    就在我回答问题 20 分钟的时候 我想到了一个有趣的场景 但我不确定其行为 让我有一个大小为 n 的整数数组 由 intPtr 指向 int intPtr 让我也有一个这样的结构 typedef struct int val1 int va
  • Flutter Firebase 删除子集合不起作用

    在我的 Firebase 结构中 我有一个集合和其中的一些子集合 我想当我删除集合时 也删除子集合 我正在尝试执行 Firebase 文档中的操作 要删除 Cloud Firestore 中的整个集合或子集合 请检索集合或子集合中的所有文档
  • 使用 python 和 conda 扩展 openCV 的 GUI

    我在用着开放式CV 3 3 with python3 6 3我安装在conda环境和一段时间 当显示图像时 使用基本的 cv2 函数imshow window name my image 例如 一个小的 GUI 将与图像一起显示 我还能够随
  • 是否可以将默认的类dunder方法转换为类方法?

    为了给你一些背景信息 昨天我遇到了这个帖子 https stackoverflow com q 62031547 5472354 我发现这个问题非常有趣 所以我尝试找到一种解决方案 使语法尽可能接近所要求的内容 这是我想出的 class D
  • GCC:为什么常量变量不放在.rodata中

    我一直相信 GCC 会设立一个static const变量为 rodata段 或 textELF 或此类文件的优化段 但情况似乎并非如此 我目前正在使用gcc GCC 4 7 0 20120505 prerelease 在装有 GNU Li
  • 如何将 select2 与 Meteor 一起使用?

    有人可以向我解释 select2 如何与 Meteor 一起使用吗 我在用zimme select2 bootstrap 3 css https atmospherejs com zimme select2 bootstrap3 css我不
  • 使用Spring将文本文件直接注入到String中

    所以我有这个 Value classpath choice test html private Resource sampleHtml private String sampleHtmlData Before public void rea
  • 撤销个人权限后更新会话

    我试图为用户提供一个通过复选框 Facebook SDK for Android 设置 撤销发布权限的选项 下面提供了代码 一切工作正常 除了在撤销负责检查发布权限的代码后惨遭失败 据我所知 Session 无法知道用户登录后是否撤销了任何
  • div内容加载后获取div高度

    我正在尝试设置一个的高度div等于另一个 我将它们称为左 div 和右 div 正确的div内容并不总是相同 并且使用 jQuery 加载 它是一个过滤器 因此每次单击过滤器时 内容都会发生变化 父级 div 高度也会发生变化 这是我的代码
  • 在 R 中,有没有办法将 RMarkdown v2 html 文件作为电子邮件正文发送

    我开发了一份报告 该报告大量使用了 RMarkdown v2 中的功能 特别是向 html 文档添加 css 类和 id 的功能 以便使用样式表更好地控制输出 我希望通过电子邮件正文发送这些报告 我一直在尝试使用 send mail mai
  • 如何显示搜索视图最近的搜索历史记录

    我尝试使用以下方式但无法显示最近的搜索历史记录 在 ActionBar 上的 SearchView 中创建 历史记录 https stackoverflow com questions 19166537 create history to
  • Java 中的 LDAP 如何针对此 LDAP 进行搜索/身份验证

    我正在使用 LDAP 和 Java 搜索 这是我的 LDIF 导出 组织简单 version 1 dn dc example dc com objectClass organization objectClass dcObject obje
  • 从 C# 访问 Ironpython 字典

    我在 Ironpython 脚本中定义了字典 我想从我的 C 访问该字典 代码 有人可以提供示例代码来实现我的要求 抱歉 之前我没有用代码提及我的问题陈述 import clr clr AddReference System Core im
  • JavaScript 中的重入

    我想提高对可重入这个词的理解 这个函数是可重入的吗 function foo yield 1 yield 2 和这个 function foo return 1 和这个 var x 0 function foo return x 和这个 f