JAVASCRIPT闭包以及原型链

方法内部还有个方法,实例化父方法后,再次调用父方法,可以运行父方法内部的子方法,这样的程序就叫做闭包

DEMO如下:

     //function outerFn() {
        //    var outerVar = 0;
        //    document.write("Outer function<br/>");
        //    function innerFn() {
        //        outerVar++;
        //        document.write("Inner function\t");
        //        document.write("outerVar = " + outerVar + "<br/>");
        //    }
        //    return innerFn;
        //}
        //var fnRef = outerFn();
        //fnRef();
        //fnRef();
        //var fnRef2 = outerFn();
        //fnRef2();
        //fnRef2();

输出值如下:

Outer function
Inner function    outerVar = 1
Inner function    outerVar = 2
Outer function
Inner function    outerVar = 1
Inner function    outerVar = 2
实例化的时候不会走子方法的。只有下面的调用才会走子方法。
闭包可以用在许多地方。它的最大用处有两个,一个是前面提到的可以读取函数内部的变量,另一个就是让这些变量的值始终保持在内存中,直到程序执行完才能被CG回收,然后销毁

 例子二:

 function f1() {
            var n = 999;
            nAdd = function () { n += 1 }
            function f2() {
                alert(n);
            }
            return f2;
        }
        var result = f1();
        result(); // 999
        nAdd();
        result(); // 1000

 关于原型链:

在JavaScript中,一共有两种类型的值,原始值和对象值.每个对象都有一个内部属性[[prototype]],我们通常称之为原型.原型的值可以是一个对象,也可以是null.如果它的值是一个对象,则这个对象也一定有自己的原型.这样就形成了一条线性的链,我们称之为原型链.,顺着某一个类型可以找到他的最顶层,这个过程中每一个环节构成了JS的原型链,最顶级貌似是NULL,每一个对象都有一个指向他的原型的类似指针物

posted @ 2016-03-31 17:04  洛晨随风  阅读(217)  评论(0编辑  收藏  举报