JavaScript 中的递归函数调用

2023-12-24

我知道在 JavaScript 中对函数进行递归调用时应该小心谨慎,因为第二次调用可能会慢 10 倍。

雄辩的 JavaScript http://eloquentjavascript.net/chapter3.html states:

有一个重要的问题:在大多数 JavaScript 实现中,第二个版本比第一个版本慢大约 10 倍。在 JavaScript 中,运行一个简单的循环比多次调用一个函数要便宜得多。

约翰·雷西格甚至说这是一个问题this http://ejohn.org/blog/javascript-performance-rundown/ post.

我的问题是:为什么使用递归效率如此低下?这只是特定引擎的构建方式吗?我们会在 JavaScript 中看到不是这样的时代吗?


由于更改堆栈和设置新上下文等的所有开销,函数调用比简单循环更昂贵。为了使递归非常高效,语言必须支持某种形式的尾部调用消除,这基本上意味着将某些类型的递归函数转换为循环。像 OCaml、Haskell 和 Scheme 这样的函数式语言可以做到这一点,但据我所知,没有 JavaScript 实现这样做(除非它们都这样做,否则它只会有一点用处,所以也许我们遇到了哲学家就餐的问题)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JavaScript 中的递归函数调用 的相关文章

  • 关闭选项卡时要求确认[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 当我在某些浏览器上关闭页面时 我希望出现一个消息框 并询问我是否真的要关闭页面 有两个按钮 如果我单击No那么这个标签就不会被关闭 我怎样
  • React js Stripe 结账不起作用

    我正在尝试在 React js 应用程序中呈现条带结账默认表单
  • 尝试将布尔 C# 变量传递给 javascript 变量并将其设置为 true

    在我的 aspx 页面中 我将布尔变量 C 传递给需要布尔类型的 javascript 函数 但遇到了问题 但是 C 变量返回 True 而 javascript 不喜欢大写 myjavascript 如果我将 c 变量转换为字符串 那么我
  • jquery.find() 可以只选择直接子项吗?

    我应该向 jQuery find 提供什么参数来选择元素子元素而不选择其他元素 我不能用 gt 引导选择器 而用 将选择所有后代 而不仅仅是直接子代 我知道 jQuery children 但这是一个库 因此用户能够提供自己的选择器 并且我
  • Web 串行 API - 未捕获(承诺中)DOMException:无法打开串行端口/所需成员 baudRate 未定义

    下面的代码可以在我的 Xubuntu 机器上运行 但现在我在 Kubuntu 上 它不再工作了 它不会打开端口 Arduino IDE 工作正常 可以向开发板写入代码 并且我可以在 Chrome 中选择设备 Arduino Uno 但当我尝
  • TypeError: props.render 不是一个函数(React hook 形式)

    我将方法作为我用react hook form制作的形式的道具传递 当从react hook form添加控制器时 它给了我 TypeError props render不是一个函数 我在网上找不到任何解决方案 因此感谢任何帮助 impor
  • 解析“流”JSON

    我在浏览器中有一个网格 我想通过 JSON 将数据行发送到网格 但浏览器应该在接收到 JSON 时不断解析它 并在解析时将行添加到网格中 换句话说 在接收到整个 JSON 对象后 不应将行全部添加到网格中 应该在接收到行时将其添加到网格中
  • 使用 useReducers 调度函数发送多个操作?

    使用时是否可以通过调度函数发送多个动作useReducer挂钩反应 我尝试向它传递一组操作 但这会引发未处理的运行时异常 明确地说 通常会有一个初始状态对象和一个减速器 如下所示 const initialState message1 nu
  • 使用模数按字母顺序对列表进行排序

    我在获取元素列表并按字母顺序对它们进行排序方面没有任何问题 但我很难理解如何使用模数来做到这一点 更新 这是按我的方式工作的代码 但是 我更喜欢下面提供的答案的可重用性 因此接受了该答案
  • jQuery AJAX 调用 Java 方法

    使用 jQuery AJAX 我们可以调用特定的 JAVA 方法 例如从 Action 类 该 Java 方法返回的数据将用于填充一些 HTML 代码 请告诉我是否可以使用 jQuery 轻松完成此操作 就像在 DWR 中一样 此外 对于
  • 检查 JavaScript 字符串是否为 URL

    JavaScript 有没有办法检查字符串是否是 URL 正则表达式被排除在外 因为 URL 很可能是这样写的stackoverflow 也就是说它可能没有 com www or http 如果你想检查一个字符串是否是有效的 HTTP UR
  • 在 Wordpress 站点中进行 AJAX 调用时出现问题

    我在使用 Wordpress 站点功能的 AJAX 部分时遇到了一些问题 该功能接受在表单上输入的邮政编码 使用 PHP 函数来查找邮政编码是否引用特定位置并返回到该位置的永久链接 我的第一个问题是关于我构建的表单 现在我的表单操作是空白的
  • Javascript正则表达式用于字母字符和空格? [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我需要一个
  • Jquery/Javascript 上传和下载文件,无需后端

    是否可以在没有后端服务器的情况下在 JavaScript 函数中下载和上传文件 我需要导出和导入由 JavaScript 函数生成的 XML 我想创建按钮 保存 xml 来保存文件 但我不知道是否可行 另一方面 我希望将 XML 文件直接上
  • 使用 KnockoutJs 映射插件进行递归模板化

    我正在尝试使用以下方法在树上进行递归模板化ko映射 插入 http knockoutjs com documentation plugins mapping html 但我无法渲染它 除非我定义separate每个级别的模板 在以下情况下
  • MVC 在布局代码之前执行视图代码并破坏我的脚本顺序

    我正在尝试将所有 javascript 包含内容移至页面底部 我正在将 MVC 与 Razor 一起使用 我编写了一个辅助方法来注册脚本 它按注册顺序保留脚本 并排除重复的内容 Html RegisterScript scripts som
  • Angular 2+ 安全性;保护服务器上的延迟加载模块

    我有一个 Angular 2 应用程序 用户可以在其中输入个人数据 该数据在应用程序的另一部分进行分析 该部分仅适用于具有特定权限的人员 问题是我们不想让未经授权的人知道how我们正在分析这些数据 因此 如果他们能够在应用程序中查看模板 那
  • 为什么在 Internet Explorer 中访问 localStorage 对象会引发错误?

    我正在解决一个客户端问题 Modernizr 意外地没有检测到对localStorageInternet Explorer 9 中的对象 我的页面正确使用 HTML 5 文档类型 并且开发人员工具报告该页面具有 IE9 的浏览器模式和 IE
  • 模块构建失败(来自 ./node_modules/babel-loader/lib/index.js)Vue Js

    我从 GitHub 下载了一个我和我的朋友正在开发的项目 但是当我尝试运行时 npm run serve 我收到这个错误 src main js 中的错误 Module build failed from node modules babe
  • 将 MQTTNet 服务器与 MQTT.js 客户端结合使用

    我已经启动了一个 MQTT 服务器 就像this https github com chkr1011 MQTTnet tree master例子 该代码托管在 ASP Net Core 2 0 应用程序中 但我尝试过控制台应用程序 但没有成

随机推荐

  • Stripe Checkout https://checkout.stripe.com/checkout.js 和 Elements https://js.stripe.com/v3/ 之间的区别

    我正在使用条纹支付与我的系统集成 但我不明白这两个库之间的区别 似乎使用 javascript 生成表单并将令牌传递到我们的服务器端
  • 为什么全局描述符表的第一个段描述符仅包含零?

    在我见过的许多教程中 第一个段选择器仅包含零 后面是代码和数据段 例如 lgdt gdt descriptor More code gdt start gdt null long 0x0 long 0x0 More descriptors
  • Angular 2 RC4 中的形式

    我正在尝试 Angular 2 RC4 中的表单 一切正常 但是当我启动应用程序时 浏览器控制台向我显示以下消息 It looks like you re using the old forms module This will be op
  • Gradle:复制子项目资源

    我有一个项目 其中包含一些我正在使用 Gradle 的子项目 我想做的是将资源从子项目A复制到主子项目B 我的结构看起来像这样 Application subprojectA src main resources blah subproje
  • 如果没有连接,Android WebView 不会加载缓存的网站

    我正在尝试缓存 WebView 中加载的网站 但如果网络连接关闭 我将无法使其工作 Cachdirectory 已创建 缓存文件就在那里 已授予权限 我加载网页然后关闭网络 也给出了 WI FI 权限 当我尝试重新加载页面时出现错误 现在应
  • 填充中的排序不起作用(猫鼬)

    我的MongoDB版本是3 2 mongoose版本是4 6 0 这些是我的架构 chat const chatSchema new mongoose Schema users type mongoose Schema Types Obje
  • 在 DirectX 中显示视频

    在使用 XAudio2 和 Direct3D9 10 的应用程序中显示视频 带声音 的最佳 最简单方法是什么 至少它需要能够传输可能更大的视频 并考虑到窗口宽高比可能与视频不同的事实 例如通过添加信箱 尽管理想情况下我希望能够将视频嵌入到3
  • Macroable.php 第 74 行中的 BadMethodCallException:方法控制器不存在

    当我遵循路线控制器时 我遇到了一些问题 Web php代码 Route controller admin adminController adminController php代码
  • VS Code Python 等待调试器连接超时

    昨天 在 Visual Studio Code 自我更新 从 1 27 2 到 1 28 2 之前 我可以在激活特定环境并调试脚本后从 anaconda 提示符中打开它 现在 当我尝试调试脚本时 收到有关等待调试器连接超时的错误 我遵循了另
  • 如何使 DIV 部分可点击?

    我编写了一个网页 其中的链接都包含在它们自己的标签中 我还使用 CSS 边框 背景颜色 填充 将它们设置为所有按钮样式 如何让整个 DIV 被点击来激活链接 实现这种效果 使链接像按钮一样 的最佳方法是将 css 应用到链接本身 这是一个基
  • 回收位图异常

    我收到这个异常 异常 java lang IllegalStateException 无法复制回收的位图 我的代码是 int width bitmap getWidth int height bitmap getHeight int new
  • 如何在子测试中访问 Jest 测试环境的类属性?

    我已经为jest创建了一个测试环境 它非常接近于他们的官方文档 https jestjs io docs en configuration testenvironment string 我在构造函数中设置了一些值 我希望将它们提供给环境中使
  • Android 跳过 WebView 焦点并使用 TalkBack 直接进入内容

    我的 Android 应用程序中有一个 WebView 但启用 TalkBack 后 它会聚焦于整个视图 用户必须滑动到下一个项目才能开始听到 WebView 内容 有没有办法跳过WebView的选择并直接跳到选择内容 在尝试之后我不这么认
  • 基于控制器操作的 Rails 条件(“if”)语句

    可能有更好的方法来做到这一点 但我试图在控制器中基于当前操作在 Rails 中创建一个 if 语句 这将在视图中使用 例如 如果它是编辑页面或显示页面等 我想要不同的样式 是否有 if 语句可以指定这一点 我需要一个 if 语句 因为它在多
  • Liquibase + Postgresql + Spring Jpa:Id 自动递增问题

    我在实体中有以下描述 Id GeneratedValue strategy GenerationType IDENTITY private Long id 用于生成此 id 的 Liquibase 指令如下
  • 通过 Flask 将串行数据传递给 javascript

    我一直在研究将数据从 Flask 推送到 Javascript 主要是通过修改此处找到的代码 https github com clebio flask d3 https github com clebio flask d3 现在我尝试从
  • Android 中的 ViewPager 滚动问题

    我有一个ViewPager动态数量images在里面 这ViewPager作为自定义行添加到表视图中 由于此表视图可以有多个动态自定义行 因此我必须在scrollview用于滚动 现在我的问题是 当我水平滚动到 查看寻呼机 时 它并不完全是
  • 根据商品数量有条件地按购物车商品添加折扣

    我已经建立了一个 Woocommerce 商店 并希望为所有产品设置基于 12 倍数 一盒 的特定折扣 我尝试了很多折扣插件 但没有找到我想要的 例如 如果我订购 12 件产品 X 我将获得 10 的折扣 如果我订购 15 件产品 X 前
  • 无法在 Mac OS 中使用 Python select.poll?

    python Python 2 7 5 default Aug 25 2013 00 04 04 GCC 4 2 1 Compatible Apple LLVM 5 0 clang 500 0 68 on darwin Type help
  • JavaScript 中的递归函数调用

    我知道在 JavaScript 中对函数进行递归调用时应该小心谨慎 因为第二次调用可能会慢 10 倍 雄辩的 JavaScript http eloquentjavascript net chapter3 html states 有一个重要