Closure是一个功能强大的工具,但据说如果使用不当会导致性能问题。
所以我想知道它会在哪种情况下发生?
如果有实例,那就更好了。 :)
答案 0 :(得分: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);
然后你只是传递一个引用而不是重复重新创建闭包。
答案 1 :(得分:1)
在处理闭包时可能遇到的一个性能问题是嵌套级别太多。
提供的函数被多次包装在一起,时间引擎在查找内部函数中使用的变量时必须花费的时间有时很大。