2010-11-04 21 views
2

我最近在javascript中編寫了很多代碼,我使用Prototype.js來幫助處理很多樣板,只是綁定方法更多比值得,因爲我喜歡使用閉合而不是物體來完成繁重的工作。放棄使用紅寶石塊的習慣是很難放棄的。因此,這裏是我的問題:是否有創建閉包和some_func.bind之間的性能差異(這)

var func = some_func.bind(this); 
... 
func(); 

var that = this; 
... 
some_func(); // we just rename 'this' everywhere inside some_func to 'that' 

之間的任何特定的性能差異,需要這些技巧,因爲內部函數默認爲全球範圍內的,而不是外部函數的上下文。特別是哪個版本讓事情更「平坦」。如果涉及到遞歸,那麼綁定版本將進入抓取狀態,因爲綁定會在函數內部保留摺疊函數,直到展開事物是不可能的,至少我認爲會發生這種情況。第二個版本是否有同樣的問題。

回答

4

除非您在快速着火中運行數千次操作,否則性能差異實際上極其微不足道。所以我通常會使用綁定,因爲它使得更乾淨,更少的錯誤代碼。

+1

關於實際的性能差異,我真的不知道,但我知道有99.99%的機會,你不需要擔心這種差異。 – 2010-11-04 07:23:35

+0

實際上,我遇到了一個帶有綁定調用的遞歸函數調用的問題,顯然這是一次爬行,我開始懷疑是否用'var that = this'創建了一個閉包。讓事情更「平坦」。 – davidk01 2010-11-04 07:26:18

+0

正如我所說,我真的不知道性能差異是什麼,但我知道這兩種方法應該非常快。你確定這裏沒有其他的錯誤嗎?它經歷了多少次遞歸迭代?我可以說沒有更多的細節,我從來沒有親自有過遞歸函數和bind()的問題。 – 2010-11-04 07:29:43

相關問題