Javascript Closure

closure

  • A technique of scoped name binding
  • Lexically scoped name binding

Example:

<html>
    <head>
        <title>Javascript Closure</title>
    </head>
    <body>
        <script type="text/javascript">
            function foo(x) {
                return function bar(y) {
                    return x + y;
                }
            };
            var v1 = foo(1);
            var v2 = foo(2);
            document.write("<p>v1(7) = " + v1(7) + "</p>");
            document.write("<p>v2(8) = " + v2(8) + "</p>");
        </script>
    </body>
</html>

输出是:

图片1


解析:

对于函数v1,保留了foo(x)函数中的参数x的值(x = 1),换句话说,函数v1的作用域包括foo(x)函数的参数且其参数已被设置为1;
对于函数v2,也保留了foo(x)函数中的参数x的值(x = 2),即函数v2的作用域包括foo(x)函数的参数且其参数已被设置为2.
函数v1、v2包含了foo(x)函数的参数的值,故有closure之名。


posted @ 2015-11-28 18:30  雲致  阅读(88)  评论(0)    收藏  举报