3

来自维基百科,免费的百科全书:闭包(计算机科学)

在计算机科学中,闭包是在包含一个或多个绑定变量的环境中评估的函数。调用时,该函数可以访问这些变量。闭包的显式使用与函数式编程以及 ML 和 Lisp 等语言相关联。其他语言中的对象等构造也可以用闭包来建模。

要在 JavaScript 中使用它,有人可以给我举个例子来说明它是如何应用的吗?

4

3 回答 3

11

搜索“javascript 闭包”会提供大量看起来令人鼓舞的链接。前三个是这两个(第三个链接是第二个的重新格式化版本):

如果这些对您没有帮助,请解释原因,以便我们能够更好地提供实际帮助。如果您在提问之前没有搜索,那么 - 请下次再搜索 :)

于 2008-10-17T14:37:44.870 回答
4

(使用来自 jQuery 的示例)

function SetClassOnHover(className){
  $("td").hover(
    function () {
      $(this).addClass(className);
    },
    function () {
      $(this).removeClass(className);
    }
  );
}

当变量 className 在每个函数的范围内使用时,闭包就会发挥作用。当 SetClassOnHover 退出时,两个函数都必须保留 className 的句柄,以便在调用函数时访问其值。这就是闭包所能实现的。

于 2008-10-17T14:40:24.710 回答
1

闭包的一个实际示例是当它们用于创建“私有”变量时,例如

function incrementer(){
    var i=0;
    this.increment=function(){
        i++;
    }
    this.get=function(){
        return i;
    }
}

访问 i 的唯一方法是使用 get 方法,而更改它的唯一方法是使用方法 increment。在类中,您可以这样做来模拟私有变量。

于 2011-02-22T22:50:25.020 回答