首页 > 编程语言 > 详细

JavaScript闭包函数笔记

时间:2018-08-21 10:24:53      阅读:172      评论:0      收藏:0      [点我收藏+]

闭包函数实例:

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 设置内部的变量,私有变量,成员方法等。

 

JavaScript闭包函数笔记

原文:https://www.cnblogs.com/phpcurd/p/9509381.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!