2012-02-20 96 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

在处理闭包时,可能会遇到的性能问题之一是嵌套层次太多。

提供的函数被多次包装,在查找内部函数中使用的变量时,引擎不得不花费的时间有时很重要。