2012-02-20 98 views
0

關閉是一個強大的工具,但據說如果不正確使用它會導致性能問題。什麼時候關閉會導致性能問題

所以我想知道在哪種情況下會發生?

這是更好的,如果與現場的例子。 :)

+2

如果使用不正確,任何東西都會導致性能問題。 – SLaks 2012-02-20 14:12:20

回答

2

一個實例是在循環中創建它們。考慮以下jQuery:

for(var i = 0; i < 1000; ++i) 
    $('#elements').click(function(e) { console.log(e); }); 

這將在每次迭代中創建一個閉包。這可以通過單獨創建函數來輕鬆優化:

function log(e) { console.log(e); } 
for(var i = 0; i < 1000; ++i) 
    $('#elements').click(log); 

然後,您只是傳遞引用而不是重複重新創建閉包。

+0

日誌函數是閉包嗎?我認爲這只是一個未命名的功能。 – hguser 2012-02-20 14:27:51

+0

它是*不*封閉。優化將是刪除使用閉包。這個例子是關閉的一個*誤用,修復就是不使用一個。另外日誌是一個命名函數。 – Chad 2012-02-20 14:57:02

1

在處理閉包時,可能會遇到的性能問題之一是嵌套層次太多。

提供的函數被多次包裝,在查找內部函數中使用的變量時,引擎不得不花費的時間有時很重要。