我正在浏览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未定义。这让我更加困惑。
答案 0 :(得分:2)
包含逗号分隔表达式的parens将返回最后一个表达式。所以:
(2, 3, 4) + 1
返回5
所以,而不是做:
alert("Hello World!!")
你可以这样做:
(prompt, alert)("Hello World!!")
因为(prompt, alert)
会返回alert
,对吗?
这正是该代码中发生的事情
(0, m.Hf)(...)
只是调用m.Hf()
方法,只需要进行一些嵌套。
希望这会有所帮助。干杯