2014-01-06 53 views
0

我正在瀏覽YouTube的一些JavaScript代碼,並且遇到了一些我從未見過的東西。以下是相關的代碼位:在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是不確定的。這使我更加困惑。

回答

2

用逗號分隔表達式的parens將返回最後一個表達式。所以:

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

所以,與其這樣做的:

alert("Hello World!!") 

你可以這樣做:

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

因爲(prompt, alert)回報alert,對不對?

這正是發生的事情在該代碼

(0, m.Hf)(...)只是調用m.Hf()方法,只需用一些嵌套。

希望這會有所幫助。乾杯

+0

是否有機會返回最後定義的值?這可以解釋這裏的目的,調用m.Hf()或者根據m.Hf是否被定義而不做任何事情,對吧?它是這樣工作嗎? –

+1

不,它總是返回最後一個參數(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Expressions_and_Operators#Comma_o​​perator)。我認爲這個代碼由於某種原因被故意混淆了。使用'0'作爲函數將是一個錯誤。 –

+0

嗯,奇怪。好吧,我猜混淆在我身上。 –