2011-09-26 61 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()