【问题标题】:What difficulty exactly closure resolved in javascript? [closed]在javascript中究竟解决了什么困难? [关闭]
【发布时间】:2013-06-27 11:06:36
【问题描述】:

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

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

我阅读了How do JavaScript closures work?,其中有很好的解释,但我无法回答上述问题。

【问题讨论】:

  • 闭包主要避免在全局范围内使用变量。例如,当使用不同的插件时,如果每个插件在全局范围内使用相同名称的变量,最后加载的插件将覆盖另一个插件的前一个变量。闭包也可以让你保持变量的值,尤其是当你在循环中执行一些异步操作时。
  • 这篇文章可能会对你有所帮助。 msdn.microsoft.com/en-us/magazine/ff696765.aspx 继续搜索和阅读,那里有大量文章

标签: javascript jquery closures


【解决方案1】:

这是一个闭包示例:

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. 闭包保存函数的上下文信息。在此示例中,如果计数器和项目数组,则闭包会保留数字。如果我不使用闭包,conter 会发生变化,所有警报都会显示未定义(var i 应该是 3)。

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

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

【讨论】:

    猜你喜欢
    • 2015-01-10
    • 2014-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-09
    • 1970-01-01
    • 2011-06-18
    • 2020-02-04
    相关资源
    最近更新 更多