render: function render(context, partials) {
return this.r(context, partials);
},
鑑於此代碼來自Twitter的新hogan.js庫來演示該問題;命名該函數兩次的目標是什麼?命名對象屬性函數
render: function render(context, partials) {
return this.r(context, partials);
},
鑑於此代碼來自Twitter的新hogan.js庫來演示該問題;命名該函數兩次的目標是什麼?命名對象屬性函數
如果它想,功能render
將能夠call itself via render()
,但render()
不可訪問anywhere else。
此外,在堆棧跟蹤中,您將看到render
作爲函數名稱,而不是。
遞歸調用需要它。
這不是*需要*但它可以用於此。 – 2011-12-22 17:23:19
@Felix Kling確切:) – yatskevich 2011-12-22 17:24:11
的第一次出現渲染是通過
object.render(context, partials);
第二的函數存儲在,這樣就可以調用該函數的字段的名稱渲染名稱的功能本身。調試工具然後顯示渲染而不是隻有函數。
第二,可能的原因是該函數可以自己遞歸調用。
var render = function render(n) {
console.log("render");
if (n < 1)
render(n + 1);
};
render(0);
編輯:對不起,我寫的東西真的錯了第一次修訂。
是的,你是對的。可能我需要休息一下。 – Yogu 2011-12-22 17:33:15
還必須說,舊IE版本中存在一個錯誤,即它將爲命名函數表達式生成兩個不同的函數。 – 2011-12-22 17:22:50
非常感謝你的解釋。這是我現在已經迷惑了幾個月的模式。 – 2011-12-22 17:25:58
這在嚴格模式下也是必需的,因爲'arguments.caller'和'arguments.callee'都會拋出讀取,因此實際上需要命名該函數以調用它自己。 – 2011-12-22 17:26:14