我是javascript的新手,我正在努力理解它。
以下代码段javascript代码来自项目vishEditor.js的文件Vish,整个文件包含超过3万行,因此我将魔法部分切割成一个小文件{{3} }。
eval(function(p, a, c, k, e, r) {
e = function(c) {
return (c < a ? "" : e(parseInt(c / a))) + ((c = c % a) > 35 ? String.fromCharCode(c + 29) : c.toString(36))
};
.......
}
return p
}("(D($){8($.1s.1v){H}$.1s.6i=$.1s.1v=D(u,w){8(1l.S==0){18(J,'6j 55 6k 1j \"'+1l.4o+'\".');H 1l}8(1l.S>1){H 1l.1W(D(){$(1l).1v(u,w)})}F y=1l,$12=1l[0],56=L;8(y.1q('57')){56=y.1P('3o','4p');y.T('3o',['4q',J])}F z={};z.59=D(o,a,b ......
我有两个问题:
(1)当我运行项目vish
时,函数eval(function(p, a, c,k,e,r){}();
被调用,但我不知道函数的具体目标,为了测试,我删除了这个函数并重新启动它,它似乎工作正常。我很困惑这个神奇的功能用于什么?
(2)magic-javascript.js中有一个非常大的魔术代码,以("(D($){8($.1s.1v){H}$.1s.6i=$.
开头,它是什么意思以及如何创建这样的魔术代码?
欢迎任何留言!
答案 0 :(得分:3)
这是缩小和混淆的文件。你不能(或者很难以这种方式调试)。在这里阅读更多相关信息:
http://www.programmerinterview.com/index.php/javascript/minification-vs-obfuscation/
答案 1 :(得分:1)
尝试http://jsnice.org/
网站描述
“欢迎来到JSNice - 我们甚至可以使混淆的JavaScript代码可读。
我们将变量和参数重命名为我们从数千个开源项目中学习的名称。
此外,我们通常还能够猜测或推断类型注释。
在JavaScript代码上尝试JSNice,看看它是如何工作的!
覆盖JSNice建议的名称(通过在设置中启用“交互式重命名”)。
单击以了解有关JSNice的更多信息。“
答案 2 :(得分:0)
我很高兴地宣布,最近我们发布了一个新版本的JSNice.org,其中包含一个内置的封隔器探测器。请检查the readable version of your file
'use strict';
(function($) {
/**
* @param {!Function} actual
* @param {string} method
* @param {!Element} data
* @return {?}
*/
function sc_setScroll(actual, method, data) {
if (data.transition == "transition") {
if (method == "swing") {
/** @type {string} */
method = "ease";
}
}
return {
anims : [],
duration : actual,
orgDuration : actual,
easing : method,
startTime : getTime()
};
}
...
支持功能的完整列表:
欢迎您试用。请不要忘记留下每个预测的反馈并填写general feedback form。您的反馈意见将有助于我们改进。