javascript中的eval()问题

时间:2011-09-26 11:06:24

标签: javascript

有人可以帮助我理解这段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

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

感谢
斯纳

3 个答案:

答案 0 :(得分:1)

定义了一个带有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未使用。

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

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

答案 1 :(得分:0)

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

这里必须有一些逻辑脚本,由于打包而被混淆。如果您有手头的脚本,可以使用this尝试解压缩它,找出它背后发生的事情。

答案 2 :(得分:0)

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

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()不会做任何有用的事情,即使它被称为即使它的预期行为可以准确地描述为“有用”。

此外,期望人们骂你使用{{1}}。