我怎样才能检查一个函数是一个纯函数?

我正在处理react-metaform ,我的一个挑战是我需要允许最终用户将元数据定义为函数。 例:

socialSecurityNumber.required: (m) => m.type == 'person' 

问题很明显:我不能相信用户。 所以,这是我打算做的预防措施:

  • 用户定义的函数应该是纯函数 。 从这个意义上说,这些函数只能访问它们的参数,没有别的。
  • 用户定义的函数将运行在对exception具有弹性的环境中,执行时间过长以及无限循环。 (我现在不担心这个)。

问题是: 我如何确保用户定义的函数只访问它的参数,而不是别的?

我会使用esprima来parsing存储在文件或数据库中的用户的JavaScript函数。 我只允许运行通过parsingtesting的代码(只有列入白名单的function – 使用局部variables,参数,…)。

您可以从一个非常简单的检查代码开始,只允许非常有限的脚本并逐步改进。 不过,我想你会随着时间的推移对解决scheme付出很大的努力,因为你的用户总是需要更多的东西。


注意: Angular.js使用它的dependency injection这种“技巧”: https //jsfiddle.net/987Lwezy/

 function test() { console.log("This is my secret!"); } function parser(f) { document.body.innerHTML = test.toString(); } parser(test);