js中闭包的理解

网上有很多关于闭包的理解,自己也来总结一下,自己总结出来的才是比较理解的;

关于闭包的原理:

一句话,闭包的原理是利用作用域链;

<script>
    var getName;
    function Foo() {
                getName = function(){ alert(1); };
                return this;
            }
            Foo.getName = function() { alert(2); };
            Foo.prototype.getName = function(){ alert(3); };
            getName = function() { alert(4); };
            function getName(){ alert(5); }

            Foo.getName(); //2
            getName(); //4
            Foo().getName(); //1
            getName(); //1
            new Foo.getName();//2
            new Foo().getName();//3
            new new Foo().getName();//3


</script>

 

闭包的用途

个人感觉,闭包的用途有两个:

一  获取内部函数的变量;

<script>
    function a () {
        var b = 123;
        return function () {
          return b
        }
    }
    var c = a();
    console.log(c()); //123
</script>

 

二 保护内部变量不被修改;

<script>
    function a() {
        var a = 1,b = 2;
        return {
            getA:function () {
                return a;
            },
            setA:function (b) {
                a = b;
                return a;
            }
        }
    }
    var c = a();
    c.setA(232);
    console.log(c.getA());
</script>

在理解面向对象和作用域链之后再去理解闭包会容易很多。

发表评论

电子邮件地址不会被公开。 必填项已用*标注