javascript 中的 eval() 问题

Problem with eval() in javascript

本文关键字:问题 eval 中的 javascript      更新时间:2023-09-26

有人可以帮助我理解这段JavaScript代码:

 eval(function(p,a,c,k,e,r){e=function(c){return(c<a?'':e(parseInt(c/a)));}    

很抱歉用最少的细节激怒了你们。实际上我从 - forum.fusioncharts.com/topic/8012-fusion-charts-on-android

它在Android中使用Phonegap使用Fusioncharts。所以Fusioncharts.js包含这个代码,我不是javascript的专家,没有得到它。所以寻求帮助。但是通过查看不同的答案,我觉得这里没有完整的 src 代码。

谢谢
斯内哈

定义了一个函数,它接受 6 个参数:

function(p,a,c,k,e,r)

它将参数 e 设置为另一个函数,该函数将初始"c"参数作为参数:

e = function(c)

然后,该函数的内容检查"c"是否小于"a"。如果是,则返回一个空字符串。否则,它将再次运行相同的函数 (e(,参数 c 的整数值除以参数 a。

return(c<a?'':e(parseInt(c/a)));

参数 p、k 和 r 未使用。

由于唯一可以返回的值是空字符串,因此不应期望发生太多情况。

至于实际用途是什么 - 打败我。

这看起来像一个生成的(打包代码( - 一种通常用于减少原始Javascript代码大小和/或使某人更难弄清楚正在发生的事情的策略。

这里必须有一些逻辑脚本,由于打包而被混淆。如果你手头有脚本,你可以用它来尝试解压缩它,弄清楚它背后发生了什么。

编写得更清晰,您的代码如下:

function(p,a,c,k,e,r){
    e = function(c) {
        return c < a ? '' : e(parseInt(c/a));
    };
}();

所以你定义了一个接受 6 个参数的函数,定义了一个函数e()(在其本地范围内(,该函数接受单个参数并递归调用自身,只要它的参数大于原始函数的第二个参数 ( a (,最终要么返回 '' 要么无限递归a介于 0 和 1 之间的任何值(假设正值 c 最初更大比a(。

最外层的函数将由eval()语句调用,但内部函数(e()(不会。 由于e()在本地的作用域为最外层的函数,这使得运行此代码毫无意义,至少如此处所示的孤立运行。 它似乎并没有真正做任何非常有用的事情。 特别是因为eval()没有为a提供任何值,所以当代码执行时a将是未定义的,这意味着e()不会做任何有用的事情,即使它被调用,即使它的预期行为可以准确地描述为"有用"。

另外,期待人们责骂你使用eval()