2011-09-26 32 views
0

能有人帮助我理解这段JavaScript代码片段:问题的的eval()在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

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

感谢
斯纳

+2

用的eval()的问题,是的eval()。 – jAndy

+0

它什么也没做。一)它不解析为有效的JavaScript。 b)如果添加需要的大括号来解析该函数​​,则该函数完全不返回。 – Jamiec

+0

参考:http://dean.edwards.name/packer/ – Yoshi

回答

0

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

这里一定有一些逻辑脚本在进行,由于打包而导致混淆。如果您手头有脚本,则可以使用this来尝试解压缩它,以了解它背后发生了什么。

+0

啊,在服务器上启用gzip压缩时,人们做的尝试使JavaScript更小的荒谬事情同样适用,并且产生的废话代码更少。 – aroth

+0

对不起,你最不需要的细节让你感到恼火。其实我得到的代码 - http://forum.fusioncharts.com/topic/8012-fusion-charts-on-android/ 这是abput在Android的使用PhoneGap的使用FusionCharts的。所以Fusioncharts.js包含这个代码,我不是JavaScript专家,并没有得到它。所以要求帮助。但通过查看不同的答案,我觉得完整的src代码在这里不可用。 – Smitha

+0

但我希望你能在答案中得到我的观点。 – Saket

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

不明白为什么答案是downvoted。 +1来抵消。 –

+0

很好的逻辑解释,但我怀疑OP是否想要。如果确实如此,我宁愿投票结束。 – Saket

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()