javascript - 纯函数 : Does "No Side Effects" Imply "Always Same Output, Given Same Input"?

标签 javascript functional-programming language-lawyer pure-function

将函数定义为的两个条件如下:

  1. 无副作用(即只允许更改局部范围)
  2. 给定相同的输入总是返回相同的输出

如果第一个条件总是为真,那么第二个条件是否有任何时候不为真?

即真的只需要满足第一个条件吗?

最佳答案

下面是一些不改变外部作用域但仍然被认为是不纯的反例:

  • function a() { return Date.now(); }
  • function b() { return window.globalMutableVar; }
  • function c() { return document.getElementById("myInput").value; }
  • function d() { return Math.random(); }(这确实改变了 PRNG,但不被认为是可观察的)

访问非常量非局部变量足以违反第二个条件。

我一直认为纯度的两个条件是互补的:

  • 结果评估不得状态产生影响
  • 评估结果不得受到副状态的影响

术语 side effect仅指第一个,修改非局部状态的函数。然而,有时读取操作也被视为副作用:当它们是操作并且也涉及写入时,即使它们的主要目的是访问一个值。这方面的示例包括生成修改生成器内部状态的伪随机数、从推进读取位置的输入流中读取,或从涉及“进行测量”命令的外部传感器读取。

关于javascript - 纯函数 : Does "No Side Effects" Imply "Always Same Output, Given Same Input"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54992302/

相关文章:

.net - F#:函数中有更多返回点,如何处理?

javascript - 不可变JS : Merging two Lists by values

c++ - 别名模板的包扩展

C++11 替代 boost::checked_delete

c++ - 为什么我不能将 =default 用于带有成员初始值设定项列表的默认 ctors

javascript - 使用 jquery 解析数据-*

oop - Scala 不可变与可变。一个人应该走的路是什么?

javascript - 我怎样才能使这个 jQuery 与浏览器 "back"按钮配合得很好?

javascript - Jankuri ng-gallery 执行无错误后什么也没有显示

javascript - 删除消息数组时出现 DiscordJS 错误