JavaScript闭包函数笔记

闭包函数实例:

function foo1 () {
        var a = 2;
        function baz () {
            console.log(a);
        }
        return baz();
    }
    var bar = foo1(); // 这就是闭包

  

(可以理解为在一个函数作用域外部调用函数作用域内部的变量)

也可也是这样:

function foo () {
        var service = 'init value';
        return {
            initService : function () {
                console.log(service);
            },
            setService : function () {
                service = 'setService';
            },
        };
    }
    var f = foo();
    f.initService(); // 调用初始值
    f.setService(); // 改变初始值
    f.initService(); // 打印新的值

既然能引用到变量,那么也可以当做参数传递给另一个函数。

function foo2 () {
        var a = 0;
        function bar () {
            a ++;
            console.log(a);
        }
        return baz(bar); // 这里bar函数被当做参数传递给baz函数,因为bar函数内有foo2作用域的变量,所以就达到了在外部函数访问本身父级函数作用域的目的。
    }
    function baz (fn) {
        for (var i = 0; i < 5; i ++) {
            fn();
        }
    }

    foo2(); // 1 2 3 4 5

总结:

1、回调函数都是在使用闭包(回调函数: 把一个函数指针作为参数传递给另一个函数,当另一个函数调用时,此参数(函数指针)所指向的函数就被叫做回调函数)

比如: 

function foo3 () {
    a = 0;
    foo4(foo3);  
}
function foo4 () {
    console.log(a); // 此处打印的是foo3中的变量a
}
foo3();

2、闭包就像PHP中的类,外部可以通过方法访问 or 设置内部的变量,私有变量,成员方法等。

猜你喜欢

转载自www.cnblogs.com/phpcurd/p/9509381.html
今日推荐