2011-12-22 44 views
5
render: function render(context, partials) { 
    return this.r(context, partials); 
}, 

鑑於此代碼來自Twitter的新hogan.js庫來演示該問題;命名該函數兩次的目標是什麼?命名對象屬性函數

回答

7

如果它想,功能render將能夠call itself via render(),但render()不可訪問anywhere else

此外,在堆棧跟蹤中,您將看到render作爲函數名稱,而不是。

+2

還必須說,舊IE版本中存在一個錯誤,即它將爲命名函數表達式生成兩個不同的函數。 – 2011-12-22 17:22:50

+0

非常感謝你的解釋。這是我現在已經迷惑了幾個月的模式。 – 2011-12-22 17:25:58

+1

這在嚴格模式下也是必需的,因爲'arguments.caller'和'arguments.callee'都會拋出讀取,因此實際上需要命名該函數以調用它自己。 – 2011-12-22 17:26:14

0

遞歸調用需要它。

+0

這不是*需要*但它可以用於此。 – 2011-12-22 17:23:19

+0

@Felix Kling確切:) – yatskevich 2011-12-22 17:24:11

0

第一次出現渲染是通過

object.render(context, partials); 

第二的函數存儲在,這樣就可以調用該函數的字段的名稱渲染名稱的功能本身。調試工具然後顯示渲染而不是隻有函數

第二,可能的原因是該函數可以自己遞歸調用。

var render = function render(n) { 
    console.log("render"); 
    if (n < 1) 
     render(n + 1); 
}; 
render(0); 

編輯:對不起,我寫的東西真的錯了第一次修訂。

+0

是的,你是對的。可能我需要休息一下。 – Yogu 2011-12-22 17:33:15

相關問題