如何理解Javascript中的闭包?

这个问题在这里已经有了答案:

  • JavaScript关闭如何工作? 88个答案

  • 闭包是一个绑定到一个或多个外部变量的函数

    这个概念的一个例子是功能栏绑定到外部变量x,y和z:

    function foo(x, y) {
      var z = 3;
    
      return function bar(a, b, c) {
        return (a + b + c) * (x + y + z);
      };
    }
    
    var closure = foo(1, 2);
    closure(5, 6, 7); // (5 + 6 + 7) * (1 + 2 + 3) = 24
    

    变量closure指向从foo调用返回的内部函数bar 。 调用closure就像是重新进入内范围foo ,这让了解所有的foo的局部变量和参数。

    即使在父功能终止之后

    这意味着在执行foo之后,存储在closure变量中的返回函数将保持foo的状态。 你甚至可以通过再次调用foo来创建多个独立的闭包:

    var closure = foo(1, 2);
    closure(5, 6, 7); // (5 + 6 + 7) * (1 + 2 + 3) = 24
    
    var closure2 = foo(0, 0);
    closure2(5, 6, 7); // (5 + 6 + 7) * (0 + 0 + 3) = 21
    
    /* closure2 does not affect the other closure */
    closure(5, 6, 7); // (5 + 6 + 7) * (1 + 2 + 3) = 24
    

    你对外部变量的解释不正确。 这确实意味着它可以做到这一点:

    function make_closure()
    {
        var x = 20;
        return function()
        {
            alert(x);
        };
    }
    
    var closure = make_closure();
    closure(); // Displays 20
    

    我不确定你从哪里引用,但是它听起来像是在父功能完成运行时引用的。

    链接地址: http://www.djcxy.com/p/1481.html

    上一篇: How to understand closures in Javascript?

    下一篇: Please explain this Javascript closure exercise