闭包函数实例:
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 设置内部的变量,私有变量,成员方法等。
原文:https://www.cnblogs.com/phpcurd/p/9509381.html