【问题标题】:Javascript: what does this syntax mean (0,functionName)(functionParemeter);Javascript:这个语法是什么意思 (0,functionName)(functionParemeter);
【发布时间】:2013-05-04 16:19:40
【问题描述】:

我想知道从http://www.google.com 的来源进入 javascript 文件实际上我经常这样做并试图了解他们在那里做了什么。今天我想知道里面的文件,发现了一些奇怪的函数调用。也许它是一个愚蠢的东西,但我真的不知道它是什么,所以我无法帮助搜索它。

代码的可读性相似-

var someFunction = function(somaeParamenter){
    //do some stuffs;
    return something;
}

var someOtherThing = (0, someFunction)(oneParameter);

请原谅我缺乏知识。

编辑:

来源-

我正在使用铬。 在http://www.google.com 页面打开时,我打开了开发者工具。然后我打开源选项卡并在查看器中打开文件https://www.google.com.bd/xjs/_/js/s/c,sb,cr,cdos,vm,tbui,mb,wobnm,cfm,abd,bihu,kp,lu,m,tnv,amcl,erh,hv,lc,ob,r,rsn,sf,sfa,shb,srl,tbpr,hsm,j,p,pcc,csi/rt=j/ver=WUW4ydIf-wI.en_US./am=gA/d=1/sv=1/rs=AItRSTPu52CumknQsh0was81vrM4inla_w。这个文件是我在那里看到的唯一 js 文件。我启用了“漂亮的打印”,在第 58 行你会找到定义-

_.Va = function(a) {
            var b = typeof a;
            if ("object" == b)
                if (a) {
                    if (a instanceof window.Array)
                        return "array";
                    if (a instanceof window.Object)
                        return b;
                    var c = window.Object.prototype.toString.call(a);
                    if ("[object Window]" == c)
                        return "object";
                    if ("[object Array]" == c || "number" == typeof a.length && "undefined" != typeof a.splice && "undefined" != typeof a.propertyIsEnumerable && !a.propertyIsEnumerable("splice"))
                        return "array";
                    if ("[object Function]" == c || "undefined" != typeof a.call && "undefined" != typeof a.propertyIsEnumerable && !a.propertyIsEnumerable("call"))
                        return "function"
                } else
                    return "null";
            else if ("function" == b && "undefined" == typeof a.call)
                return "object";
            return b
        };

在第 83 行你会看到函数被调用。

_.Za = function(a) {
            return "array" == (0, _.Va)(a)
        };

【问题讨论】:

  • 你能引用确切的来源吗?我在http://www.google.com/ 收到的邮件中找不到它
  • 旁注:Google 的 JS 进行了高度优化和缩小,因此它可能不是获得影响力的最佳位置。
  • @Juhana 你是对的,但我无法抗拒自己偷看那里:)
  • @bergi 我已经编辑了我的问题,引用了来源。
  • 这只是一个逗号运算符吗? developer.mozilla.org/en-US/docs/JavaScript/Guide/…

标签: javascript


【解决方案1】:
(0, someFunction)

直接返回someFunction

所以这相当于

var someOtherThing = someFunction(oneParameter);

您确定您输入的内容完全一样吗?如果是这样,并且如果不是某种混淆,那么它可能是某种缩小的不幸结果。如果实际代码稍有不同,例如 (0, someObject.someFunction) ,那么 indirect function call 可能会有一些用途。

编辑:

您的编辑确认目标可能是确保函数内部的this 是全局对象(浏览器中的window),而不是附加Va 的对象(_ )。

【讨论】:

  • 他们可能有一个赋值或函数调用或任何其他表达式,而不是0
  • (Potato, I think) it is the result of obfuscation.
  • 有一个微妙的例外,它们不相等:(0, eval)(…)
  • @Bergi 这是一个有趣的观点。间接调用函数可能是这里的目标,但我看不出它对我们看到的代码有什么用处。
猜你喜欢
  • 2015-12-04
  • 2011-01-19
  • 2010-10-05
  • 2021-07-11
  • 1970-01-01
  • 1970-01-01
  • 2012-07-25
相关资源
最近更新 更多