Reading through this article on Javascript Functional Programming,它提到了引用透明度被定义为:
引用透明性:函数总是为相同的参数提供相同的返回值。这意味着函数不能依赖于任何可变状态。
IIUC Javascript函数满足这一要求,即使它们依赖于可变状态,因为两个函数即使同时运行也不能在共享状态下操作?
发布于 2018-10-22 23:26:12
所以总结我们的讨论,是的,Javascript函数确实具有引用透明性,只要它们所依赖的可变状态不改变。
换句话说,当函数所依赖的可变状态保持不变时,将为相同的输入提供相同的输出。
这似乎有些显而易见,但对于Javascript和函数式编程来说,这是一个重要的概念/实现,因为Javascript不能同时在两个线程中运行函数。如果我们可以在函数运行时改变函数所依赖的状态,我们就可以创建难以推理的竞争条件,这将使函数结果不可预测,而这正是我们试图通过引用透明性来避免的。
例如,只要x不变,依赖于可变状态x
的函数fn(5)
将始终为相同的输入返回相同的结果。
在非Javascript环境中,可以在函数运行时更改x,因此两次调用fn(5)
可能会返回不同的结果。
使用Javascript,如果fn(5)
返回一个不同的结果,我们就知道原因了。这是因为在两次fn(5)
调用之间更改了x
。
https://stackoverflow.com/questions/52938276
复制相似问题