2014-01-29 123 views
21

我見過很多在他們的javascript代碼中有一些function (p,a,c,k,e,d)的網站。不同的網站可能有這個功能的不同主體,但爲什麼他們都使用這個參數名稱(p,a,c,k,e,d)?我的意思是它是一個標準或某種東西或一個圖書館,他們遵循相同的慣例。自定義函數(p,a,c,k,e,d)用於什麼?

其次,似乎這個函數應該在頁面加載後立即執行。就像下面的網頁片段一樣。

你能幫我理解這段代碼:eval()用於評估像2+3這樣的表達式,但下面的代碼是如何傳遞一個函數給它的?

try{ 
     eval(
      function(p,a,c,k,e,d) 
       { 
        //some code goes here 
       } 
    }catch(err){} 

這個問題聽起來很蠢,但我認真地想了解的function(p,a,c,k,e,d)的奧祕,所以不要downvote。

回答

19

所以如果你使用http://matthewfl.com/unPacker.html我張貼在評論時,「解包」的代碼到這一點:

(function() 
    { 
    var b="some sample packed code"; 
    function something(a) 
     { 
     alert(a) 
    } 
    something(b) 
} 
)(); 

它似乎並沒有惡意。有關您爲什麼要使用此內容的軟論證,請參見javascript packer versus minifier

打包更小但速度更慢。

甚至更​​難以調試。

大多數衆所周知的框架和插件只是縮小了。


打包器做的更多,然後只是重命名變量和參數,它實際上映射 使用Base62的源代碼,然後必須通過eval()在客戶端 側重建以便可用。

側步eval()是一個邪惡的問題,這也可以在頁面加載時在客戶端創建一個 大量的開銷,當你啓動 打包更大的JS庫,比如jQuery。這就是爲什麼只對你的產品JS做縮減 的建議,因爲如果你有足夠的代碼來 需要做打包或縮小,你有足夠的代碼使eval() 在頁面加載期間阻塞客戶端。


Minifier只刪除不必要的東西,如空白字符 作爲一個Packer更進一步,並盡其所能去做 儘量減少javascript的大小。例如,它將變量重命名爲 較小的名稱。

+0

真的很高興知道這件事。你讓我的一天+ 1 –

+0

@InsaneCoder所以基本上包裝效率較低,但與縮小相比,似乎做了實際的壓縮。另請參閱[快速問題:打包或縮小?](https://groups.google.com/forum/#!topic/swfobject/rULPCQTL-K4) – 2014-01-29 06:26:39

+0

打包程序未打包 - 打包的代碼未以這種方式解壓縮。只是fyi。 - 我還沒有找到哪個壓縮機使用「p,a,c,k,e,d」...... – Tobias

3

這是一個解壓縮/混淆javascript代碼的功能。許多JS庫和腳本都使用它。

online tools您可以通過使用該功能的瀏覽器打包和解壓縮代碼。

+0

請問您可以添加到您的答案爲什麼我們要壓縮JavaScript代碼,減小尺寸或使其複雜以增加其安全性? –

+0

可以用於這些原因中的任何一個或兩個,實際上,較小的腳本文件意味着更快地加載頁面的資產,並且一些開發人員喜歡通過混淆來保護他們的代碼。 – flauntster

+0

@InsaneCoder壓縮JS代碼將刪除未使用的變量,刪除註釋,console.logs(這在IE瀏覽器中是邪惡的),減小的內存大小(在瀏覽器中呈現得更快)。希望你得到了它 – Praveen

2

正如我所看到的,eval(function(p,a,c,k,e,d){})用於http://www.indiabix.com,它用於在用戶下載頁面時隱藏整個內容並打開它。也許這就是特定代碼的內部運作。

相關問題