如何用js判断一个函数是否是纯函数?

Redux中的reducer函数必须是一个纯函数

如何用程序的方法来判断是否是一个纯函数呢?

阅读 3.7k
5 个回答

可以用巨量测试用例,在不同环境下反复测试。虽然不能断言每次传入相同参数返回的结果总是一致的函数就是纯函数;但是有传入相同参数却返回不同结果行为的函数一定是有副作用的。理论上这样做的逻辑不是很严谨,然而工程上很多事情都是这样做的。

也可以将函数 toString再做静态分析,但凡函数中调用了有副作用的函数,该函数就不是纯函数。这个方法在逻辑上是严谨的,但工程量会比较大,难度之高也不是普通前端开发人员就能搞定的(俺也是普通开发人员)。

这两种方法都不建议在运行时使用,因为都会非常耗时。

顶多能判断是不是个函数,是不是纯函数这没办法。

你要是在引擎层去判断兴许还有点可能
js层肯定判断不出来的

说说我的想法不一定可行

  1. 复制这个函数和他的入参
  2. 放到新的环境执行
  3. 不报错就是纯函数
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题