在Javascript中无处不在的括号

时间:2014-01-06 06:08:10

标签: javascript youtube

我正在浏览YouTube的一些JavaScript代码,我遇到过一些我以前从未见过的东西。这是相关的代码:

for (var e = window.ytbuffer.queue, a = 0; 5 > a && a < e.length; a++) {
    var g = e[a],
        h = g.target || g.srcElement;
    (0, m.Hf)((0, m.Af)({
            a: "buffer_events",
            event_index: a,
            clientX: g.clientX,
            clientY: g.clientY,
            localName: h.localName,
            className: h.className,
            id: h.id,
            page_name: (0, m.v)("PAGE_NAME")
        }))
}
window.document.removeEventListener ? window.document.removeEventListener("click",
    window.ytbuffer.enqueueEvent, !1) : window.document.detachEvent("onclick", window.ytbuffer.enqueueEvent);
(0, m.Wc)("ytbuffer")

我想知道的是,(0,m.Hf)实际上做了什么?我知道括号可以用作数学运算的分组,但是我不希望在那里看到逗号,我知道括号可以用来包围函数参数,但是没有函数名。

谢谢,

YM

编辑:我在页面上使用了Chrome的检查器,发现m未定义。这让我更加困惑。

1 个答案:

答案 0 :(得分:2)

包含逗号分隔表达式的parens将返回最后一个表达式。所以:

(2, 3, 4) + 1返回5

所以,而不是做:

alert("Hello World!!")

你可以这样做:

(prompt, alert)("Hello World!!")

因为(prompt, alert)会返回alert,对吗?

这正是该代码中发生的事情

(0, m.Hf)(...)只是调用m.Hf()方法,只需要进行一些嵌套。

希望这会有所帮助。干杯