function 王老吉(){ var 剩余=100; return function(){ 剩余--; console.log(剩余内含饮料); } } var 喝王老吉=王老吉(); 喝王老吉();//剩下99 //干别的事情 喝王老吉()//剩下98
不知道这样的例子能不能很清楚的描述成一个闭包的作用:
1、避免每次喝王老吉时,饮料都是100开始计数(用外面的术语 讲就是避免函数执行完成后被释放。)
2、如果不使用这样的写法,就得把计数器暴露在外面
代码如下
var 剩余=100 function 喝王老吉(){ 剩余--; } 喝王老吉();//剩下99 //干别的事情 喝王老吉()//剩下98
这很不合理,因为“剩余”这个变量是属于王老吉本身的。
在早期的面向结构编程中,数据和处理逻辑是分开的。后来人们发现这样有很多问题,就把关联的数据和处理逻辑绑定起来。如果以数据(名词)为主体,封装处理逻辑(动词),就是面向对象编程里的对象。如果以处理逻辑(动词)为主体,封装数据(名词),就是函数式编程里的闭包。