在javascript中解决了什么困难?

时间:2013-06-27 11:06:36

标签: javascript jquery closures

我在过去3个月中使用javaScript,但无法理解有关闭包的内容:

  1. 在这种语言中,闭包解决了什么问题?
  2. 我什么时候应该使用封闭?
  3. 是与表现有关还是仅与最佳做法有关?
  4. 我读过How do JavaScript closures work?,其中有很好的解释,但我无法回答上述问题。

1 个答案:

答案 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);
}
  1. 闭包保留函数的上下文信息。在这个例子中,如果计数器和items数组,闭包保持数字。如果我不使用闭包,那么conter就会改变,并且所有警报都会显示为undefined(var i应为3)。

  2. 你正在使用闭包,你可能没有注意到。什么时候使用它们没有规则。在其他函数中声明函数时,您正在创建闭包。在这个例子中,我创建了一个只包含我需要的数据的闭包。但是displayItem函数创建了一个闭包,允许他访问items数组。

  3. 使用闭包可能会出现性能问题,因为您强制浏览器在内存中保留更多数据。所以人们并没有将它用于性能,也不是最佳实践,它只是解决某些问题的另一种工具。