javascript 函数是否具有可变状态的引用透明性?
Do javascript functions have referential transparency with mutable state?
Reading through this article on Javascript Functional Programming 并且它提到 Referential Transparency 被定义为:
Referential transparency: The function always gives the same return value for the same arguments. This means that the function cannot depend on any mutable state.
IIUC Javascript 函数满足这个要求,即使它们依赖于可变状态,因为两个函数不能在共享状态上操作,即使它们同时是 运行?
总结一下我们的讨论,是的 Javascript 函数确实具有引用透明性,只要它们所依赖的可变状态不变。
换句话说,相同的输入将提供相同的输出,而函数所依赖的可变状态保持不变。
这似乎有些明显,但对于 Javascript 和函数式编程来说,这是一个重要的概念/实现,因为 Javascript 不能 运行 同时在两个线程中执行函数。如果我们可以在函数 运行ning 时更改函数所依赖的状态,我们可以创建难以推理的竞争条件,这将使函数结果不可预测,这是我们试图避免的参照透明度。
例如一个函数 fn(5)
,它依赖于可变状态 x
,只要 x 不变,对于相同的输入总是 return 相同的结果。
在非 Javascript 环境中,可以在函数 运行ning 时更改 x,因此 fn(5)
的两次调用可能 return 不同的结果。
使用 Javascript 如果 fn(5)
return 是不同的结果,我们知道为什么。这是因为 x
在 fn(5)
.
的调用之间发生了变化
Reading through this article on Javascript Functional Programming 并且它提到 Referential Transparency 被定义为:
Referential transparency: The function always gives the same return value for the same arguments. This means that the function cannot depend on any mutable state.
IIUC Javascript 函数满足这个要求,即使它们依赖于可变状态,因为两个函数不能在共享状态上操作,即使它们同时是 运行?
总结一下我们的讨论,是的 Javascript 函数确实具有引用透明性,只要它们所依赖的可变状态不变。
换句话说,相同的输入将提供相同的输出,而函数所依赖的可变状态保持不变。
这似乎有些明显,但对于 Javascript 和函数式编程来说,这是一个重要的概念/实现,因为 Javascript 不能 运行 同时在两个线程中执行函数。如果我们可以在函数 运行ning 时更改函数所依赖的状态,我们可以创建难以推理的竞争条件,这将使函数结果不可预测,这是我们试图避免的参照透明度。
例如一个函数 fn(5)
,它依赖于可变状态 x
,只要 x 不变,对于相同的输入总是 return 相同的结果。
在非 Javascript 环境中,可以在函数 运行ning 时更改 x,因此 fn(5)
的两次调用可能 return 不同的结果。
使用 Javascript 如果 fn(5)
return 是不同的结果,我们知道为什么。这是因为 x
在 fn(5)
.