什么是如此神奇的JavaScript代码用于它和如何创建?

时间:2015-03-25 09:52:58

标签: javascript jquery

我是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=$.开头,它是什么意思以及如何创建这样的魔术代码?

欢迎任何留言!

3 个答案:

答案 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()
            };
        } 
...

支持功能的完整列表:

  • 将变量和参数重命名为从数千个开源项目中学习的名称;
  • 推断类型注释;
  • 支持ECMASCRIPT 6;
  • 内置封隔器探测器;
  • 可以转换尚未支持的代码;
  • 提高预测准确度;
  • 能够提供有关JSNice预测的直接反馈。

欢迎您试用。请不要忘记留下每个预测的反馈并填写general feedback form。您的反馈意见将有助于我们改进。