【发布时间】:2018-10-22 21:54:13
【问题描述】:
Reading through this article on Javascript Functional Programming 并提到 参考透明度 被定义为:
引用透明性:函数总是为相同的参数提供相同的返回值。这意味着函数不能依赖于任何可变状态。
IIUC Javascript 函数即使依赖于可变状态也满足这个要求,因为两个函数即使同时运行也不能对共享状态进行操作?
【问题讨论】:
-
@Ole javascript 是单线程的,所以很难看出两个函数如何同时对共享数据进行操作。
-
不,不是 虽然
fn正在运行,但这并不重要,我认为?只是x可以重新分配,无论何时可以重新分配 -
虽然知道“共享可变状态”对于给定环境是否值得担心当然很重要,但这与我引用的问题是分开的,即 - 无论是否@987654324 @ 可以在
fn运行时更改(即使大多数时候不能,我什至不确定它何时可能),fn的输出仍然取决于 @ 987654327@,这不是一个参数,因此fn是不纯的(或者,不是引用透明的?)无论如何。 -
我认为不同之处在于参数是显式输入,而
x只是一个外部变量。对于fn的调用者 而言,知道fn(5)将始终返回相同的输入(无论状态如何)很有用。尽管其他编程语言对 共享可变状态 的主要关注点对 JS 来说不是问题,因为它是单线程的,但纯函数仍然可以使代码更易于推理。 -
@MarkMeyer 您可以通过创建一个新的单独窗口并将值存储在 localStorage 中来拥有两个线程。在 localStorage 中读取和写入值的两个窗口之前,我实际上不得不处理竞争条件。
标签: javascript node.js typescript web-worker