2016-01-27 32 views
1

我注意到Sails.js顯式名稱的文檔,看起來可能是匿名的,回調函數 - 參見下面的例子。命名回調函數有什麼好處,可能是匿名的?

User.create({ name: 'Jamie' }).exec(function(err, created){ 
    ... 
}); 

VS

User.create({ name: 'Jamie' }).exec(function createCB(err, created){ 
    ... 
}); 

什麼是這種方法的好處?

它純粹是幫助調試調用堆棧輸出和可讀性?

回答

6

兩個原因,我能想到的:

  1. 用於調試(你提到)。 這會在調試器中爲您提供調用堆棧上的命名函數,而不僅僅是未命名的匿名引用。如果有人給你一個調用堆棧的副本,​​並且你沒有在調試器中運行它,這是非常有用的。如果您正在運行調試器,您可以隨時點擊調用堆棧的某個元素,或者查看引用的行號以查看它實際上的功能。
  2. 它允許函數從自己的實現中潛在地調用自己,如果這是有用或需要的話。但是,這個名字只能在函數本身中使用,所以它不能在其他地方使用,並且不會污染任何本地名稱空間與另一個名稱(從而保留匿名函數的好處)。
相關問題