我在过去3个月中使用javaScript,但无法理解有关闭包的内容:
我读过How do JavaScript closures work?,其中有很好的解释,但我无法回答上述问题。
答案 0 :(得分:2)
这是一个闭包示例:
var items = ["a","b", "c"];
var displayItem = function (i) {
return function () {
alert(items[i]);
}
}
for (var i = 0; i < items.length; i++) {
window.setTimeout(displayItem(i), 100);
}
闭包保留函数的上下文信息。在这个例子中,如果计数器和items数组,闭包保持数字。如果我不使用闭包,那么conter就会改变,并且所有警报都会显示为undefined(var i应为3)。
你正在使用闭包,你可能没有注意到。什么时候使用它们没有规则。在其他函数中声明函数时,您正在创建闭包。在这个例子中,我创建了一个只包含我需要的数据的闭包。但是displayItem函数创建了一个闭包,允许他访问items数组。
使用闭包可能会出现性能问题,因为您强制浏览器在内存中保留更多数据。所以人们并没有将它用于性能,也不是最佳实践,它只是解决某些问题的另一种工具。