-1

我从过去 3 个月开始使用 javaScript,但无法理解关于闭包的一些事情:

  1. 用这种语言解决了什么问题?
  2. 我什么时候应该使用闭包?
  3. 它与性能有关还是仅与最佳实践有关?

我阅读了JavaScript 闭包是如何工作的?,有很好的解释,但我无法回答上述问题。

4

1 回答 1

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 会发生变化,所有警报都会显示未定义(var i 应该是 3)。

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

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

于 2013-06-27T11:25:00.063 回答